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();
}

posted @ 2021-10-22 16:44  川野散人  阅读(211)  评论(0)    收藏  举报