64,667
社区成员
发帖
与我相关
我的任务
分享
// Singleton
#ifndef SINGLETON_H
#define SINGLETON_H
#include <QMutex>
template<class T>
class Singleton
{
public:
static T* Instance()
{
if (!m_pInstance)
{
m_mutex.lock();
if (!m_pInstance)
{
m_pInstance = new T;
}
m_mutex.unlock();
}
return m_pInstance;
}
private:
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) {}
Singleton& operator=(const Singleton&) { return *this; }
private:
class Garbo
{
public:
Garbo() {}
~Garbo()
{
if (m_pInstance)
{
delete m_pInstance;
m_pInstance = NULL;
}
}
};
private:
static Singleton* m_pInstance;
static QMutex m_mutex;
static Garbo m_garbo;
};
template<class T>
T* Singleton<T>::m_pInstance = NULL;
template<class T>
QMutex Singleton<T>::m_mutex;
template<class T>
typename Singleton<T>::Garbo Singleton<T>::m_garbo;
#endif /* SINGLETON_H */
Singleton<MyClass>::Instance()->func();