0
点赞
收藏
分享

微信扫一扫

C++模板单例

科牛 2022-05-04 阅读 46
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 条评论