C++实现多线程单例
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
TypeName& operator=(const TypeName&);
#include <mutex>
template <typename T>
class Singleton
{
public:
template<typename... Args>
static T* Instance(Args... args)
{
if (!_s_init_flag)
{
std::lock_guard<std::mutex> lock(_mutex);
if (nullptr == _s_instance)
{
//在单线程中初始化,因_instance存在于程序的整个生命周期,所以_instance采用new的方式
_s_instance = new T(std::forward<Args>(args)...);
if (nullptr == _s_instance)
{
LOG(FATAL) << "Instantiation failed" << std::endl;
return nullptr;
}
_s_init_flag = true;
}
}
}
static T* GetInstance()
{
if (nullptr == _s_instance)
{
LOG(FATAL) << "Singleton instance is nullptr" << std::endl;
return nullptr;
}
return _s_instance;
}
static void DestoryInstance()
{
delete _s_instance;
_s_instance = nullptr;
}
private:
static T* _s_instance;
static bool _s_init_flag;
static std::mutex _mutex;
private:
DISALLOW_COPY_AND_ASSIGN(Singleton);
Singleton(void);
virtual ~Singleton(void);
};
template <typename T> T* Singleton<T>::_s_instance = nullptr;
template <typename T> bool Singleton<T>::_s_init_flag = false;
话不多说,优点:
1.多线程安全
2.支持可变参数