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号