c++ 单例模式的模板类
单例模式(Singleton Pattern)是最简单的设计模式之一:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
使用懒汉模式,双锁机制实现单例模板类,线程安全且在多线程情况下能保持高性能
#include <memory>
#include <mutex>
template <class T>
class CSingleton
{
public:
static T& GetInstance();
protected:
CSingleton() {};
virtual ~CSingleton() {};
CSingleton(const CSingleton<T>&) = delete;
CSingleton<T>& operator=(const CSingleton<T>&) = delete;
private:
static std::unique_ptr<T> s_ptrInstance;
static std::mutex s_mutexInstance;
};
template <class T>
std::unique_ptr<T> CSingleton<T>::s_ptrInstance;
template <class T>
std::mutex CSingleton<T>::s_mutexInstance;
template <class T>
T& CSingleton<T>::GetInstance()
{
if (s_ptrInstance.get() == NULL)
{
std::unique_lock<std::mutex> locker(s_mutexInstance);
if(s_ptrInstance.get() == NULL)
{
s_ptrInstance = std::unique_ptr<T>(new(std::nothrow) T);
}
}
return *s_ptrInstance.get();
}

浙公网安备 33010602011771号