Qt中使用单例getInstance()示例 (含自动释放方法)

单例的实现方法:

class Helper : public QObject
{
private:
    explicit Helper(QObject *parent = 0);
    static Helper *_instance;

public:
    static Helper *getInstance()
    {
        static QMutex mutex;
        if (!_instance)
        {
            QMutexLocker locker(&mutex);
            if (!_instance)
            {
                _instance = new Helper;
            }
        }
        return _instance;
    }

    void process(void);
};

单例的调用方法:

Helper::getInstance()->process();

单例的释放方法:

>释放方法一:手动释放

delete Helper::getInstance();

>释放方法二:自动释放 (参考自:https://www.cnblogs.com/wxxweb/archive/2011/04/15/2017088.html

利用程序在结束的时候,系统会自动析构所有类的静态成员变量这项特性,在类中增加一个用于自动释放的类

于是改良后:

class Helper : public QObject
{
private:
    explicit Helper(QObject *parent = 0);
    static Helper *m_pInstance;

    class HelperRelease //定义一个只实现析构函数的类
    {
    public:
        ~HelperRelease()
        {
            if (Helper::m_pInstance)
            {
                delete Helper::m_pInstance;
            }
        }
    };
    static HelperRelease m_pHelperRelease; //定义一个静态成员,在程序结束时,系统会调用它的析构函数

public:
    static Helper *getInstance(void)
    {
        static QMutex mutex;
        if (!m_pInstance)
        {
            QMutexLocker locker(&mutex);
            if (!m_pInstance)
            {
                m_pInstance= new Helper;
            }
        }
        return m_pInstance;
    }

    void process(void);
};

那么这样单例就会在程序结束时自动释放,不用担心自己忘记了手动使用delete Helper::getInstance();来释放资源。

另外,还有一个不用new的方法:

class Helper : public QObject
{
public:
    static Helper& getInstance(void)
    {
        static Helper s_instance;
        return s_instance;
    }
};

连释放都不需要自己做了,也是比较推荐的简单方法。

猜你喜欢

转载自blog.csdn.net/mccoy39082/article/details/82050378