单例模式主要用于单一资源的访问。
下面仅列出比较好的实现方式,该实现方式具有以下特征
- 支持多线程安全
- 正常销毁
- 使用c++实现:锁的部分使用Qt的
QMutex
实现
Class Name:Singleton
Singleton.h
class Singleton
{
public:
static Singleton *GetInstance()
{
if(nullptr == singleton_)
{
singleton_creat_lock_.lock();
if(nullptr == singleton_)
{
static ConfigData singleton;
singleton_ = &singleton;
}
singleton_creat_lock_.unlock();
}
return singleton_;
}
private:
static QMutex singleton_creat_lock_;
static Singleton *singleton_;
Singleton(){};~Singleton(){};
Singleton.cpp
// 注意:一定要初始化成员变量,否则编译时会出现undefined reference to的错误
QMutex Singleton::singleton_creat_lock_;
Singleton *Singleton::singleton_ = nullptr;