实现线程安全的泛型单例模式
#ifndef __SINGLETON_H__
#define __SINGLETON_H__
#include <mutex>
#include <memory>
template <class T>
class CSingleton
{
public:
static T& Instance();
private:
CSingleton() {}
static std::unique_ptr<T> s_instace_;
static std::mutex mutex_;
};
template<class T>
std::unique_ptr<T> CSingleton<T>::s_instace_;
template<class T>
std::mutex CSingleton<T>::mutex_;
template<class T>
T& CSingleton<T>::Instance()
{
if (!s_instace_)
{
std::unique_lock<std::mutex> lock(mutex_);
if (!s_instace_)
{
s_instace_ = std::unique_ptr<T>(new T);
}
}
return *(s_instace_.get());
}
#endif // __SINGLETON_H__