QtでシングルトンgetInstance()の例を使用する(自動リリースメソッドを含む)
Use Singleton Getinstance Example Qt
シングルトンの実装:
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()
シングルトンリリース方法:
>リリース方法1:手動リリース
delete Helper::getInstance()
>リリース方法2:自動リリース(参照元: 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 //Define a class that only implements the destructor { public: ~HelperRelease() { if (Helper::m_pInstance) { delete Helper::m_pInstance } } } Static HelperRelease m_pHelperRelease / / Define a static member, the system will call its destructor at the end of the program 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 } }
リリースは自分で行う必要はありませんが、簡単な方法をお勧めします。