class Singleton{
public:
static Singleton* GetIntence(){
if (nullptr == _Intence){//因为用互斥锁是非常繁重的 所以采用双检查
_mtx.lock();
if (nullptr == _Intence){//判断空指针了才给申请新空间不然直接给以前申请的_Intence
_Intence = new Singleton();
}
_mtx.unlock();
}
return _Intence;
}
class CGarbo{//释放_Intence
public:
~CGarbo(){
if (Singleton::_Intence != nullptr){
delete Singleton::_Intence;
_Intence = nullptr;
}
}
};
static CGarbo Garbo;//创建静态变量是为了最后调用它的析构函数
private:
Singleton(){}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&)const = delete;
static Singleton *_Intence;
static mutex _mtx;
};
Singleton* Singleton::_Intence = nullptr;
Singleton::CGarbo Garbo;
mutex Singleton::_mtx;
`
懒汉模式
最新推荐文章于 2024-06-13 08:30:00 发布