一个C++单例模板类
#include <mutex>
using namespace std;
template<class T>
class CSingleton
{
private:
CSingleton();//防止构造函数
CSingleton(const CSingleton<T> &);//防止拷贝构造函数
CSingleton<T>& operator=(const CSingleton<T>&);//防止赋值拷贝构造函数
// QReadWriteLock m_internalMutex;//读写锁
static mutex m_mutexProtoBuffer;//互斥锁
static T* m_instance;//实例
public:
static T* getInstance(void);//获取唯一实例
};
template<class T>
mutex CSingleton<T>::m_mutexProtoBuffer ;
template <class T>
T* CSingleton<T>::m_instance = NULL;
template<typename T>
T* CSingleton<T>::getInstance(void)
{
if (m_instance == NULL)//第一层校验,为了避免不必要的同步,降低资源消耗。
{
lock_guard<mutex> lockGuard(m_mutexProtoBuffer);
if (m_instance == NULL)//第二层校验,为了避免多次实例化
{
m_instance = new T();
}
}
return m_instance;
}
使用方法:
typedef CSingleton<test> MYTEST;
#define MYTESTINSTANCE MYTEST::getInstance()

4046

被折叠的 条评论
为什么被折叠?



