C++模板单例

科牛

关注

阅读 48

2022-05-04

template<typename T>
class TemPlateSingleton
{
private:
	explicit TemPlateSingleton() =default;
	~TemPlateSingleton() = default;
	//禁止拷贝、移动
	explicit TemPlateSingleton(const TemPlateSingleton& tem) = delete;
	TemPlateSingleton& operator = (const TemPlateSingleton& tem) = delete;
	explicit TemPlateSingleton(TemPlateSingleton&& tem) = delete;
	TemPlateSingleton& operator = (TemPlateSingleton&& tem) = delete;
public:
	static T* GetInstance();

	static T* GetAtomicInstance();

private:
	static T* m_pTemplate;

	static std::mutex m_templateMutex;
	
};

template<typename T>
T* TemPlateSingleton<T>::m_pTemplate = nullptr;

template<typename T>
std::mutex TemPlateSingleton<T>::m_templateMutex;

template<typename T>
T* TemPlateSingleton<T>::GetInstance()
{
	std::lock_guard<std::mutex> locker(m_templateMutex);
	if (m_pTemplate == nullptr)
	{
		m_pTemplate = new T();
	}

	return m_pTemplate;
}


精彩评论(0)

0 0 举报