Qt实现通用模板单例
#include <QAtomicPointer>
#include <QMutex>
#include <memory>
using namespace std;
template <class T>
class QSingleTon
{
public:
static T* instance(QObject* parent = 0)
{
#ifdef Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
if(!QAtomicPointer<T>::isTestAndSetNative())
#endif
{
QMutexLocker locker(&mutex);
if(m_pInstance.testAndSetOrdered(0,0))
{
m_pInstance.testAndSetOrdered(0,new T(parent));
}
}
return m_pInstance;
}
private:
QSingleTon(){}
QSingleTon(const QSingleTon & );
QSingleTon & operator = (const QSingleTon & );
private:
class GC
{
public:
~GC()
{
if(m_pInstance != NULL)
{
delete m_pInstance;
m_pInstance = NULL;
}
}
};
static GC gc;
static QMutex mutex;
static QAtomicPointer<T> m_pInstance;
}
template <class T> QMutex QSingleTon<T>::mutex;
template <class T> QAtomPointer<T> QSingleTon<T>::m_pInstance = NULL;
#endif
最新文章
- Winform 后台将指定的控件集合添加到制定容器中
- CSS3-3D制作案例分析实战
- Hadoop组件构成
- C#读取网络流,读取网络上的js文件
- poj 3080 Blue Jeans
- java cpu load
- C++:基类和派生类
- /Users/XX/Library/Developer/Xcode/DerivedData/XX.app/xxsdk.bundle Directory not empty
- ping时不知道ping那个Ip的解决办法
- uva11600 状压期望dp
- 6-06. 理性任务调度(25)(拓扑排序啊 ZJU_PAT)
- iOS基础 - UITableView的数据源和代理
- 求字符数组逆序数(poj1007)
- thinkphp中的常见静态常亮
- AI应用开发实战
- One Person Game ZOJ - 3329(期望dp, 数学)
- System Generator 生成IP核在Vivado中进行调用
- [转]Java GC的原理
- python if 判断
- [CF1062F]Upgrading Cities[拓扑排序]