#include <mutex>
#include <iostream>
using namespace std;
class sig
{
private:
sig(){cout<<"gou zao"<<endl;}
static sig* ins_;
public:
static sig* getInstance()
{
if(ins_==nullptr)
{
static once_flag flag;//此处要有定义为static,不然可能会导致单例失效
call_once(flag,[&](){cout<<"get"<<endl;ins_ = new (std::nothrow) sig();});
static xigou xig;//它析构时会析构单例对象
}
return ins_;
}
~sig()
{
cout<<"sig xigou"<<endl;
}
class xigou
{
public:
~xigou()
{
if(sig::ins_)
{
delete sig::ins_;
cout<<"xigou "<<endl;
}
}
};
};
sig* sig::ins_=nullptr;
int main()
{
thread th1([](){sig* ptr = sig::getInstance();cout<<"dizhi="<<ptr<<endl;});
thread th2([](){sig* ptr = sig::getInstance();cout<<"dizhi="<<ptr<<endl;});
th1.join();
th2.join();
}
带有析构的懒汉式单例
最新推荐文章于 2024-07-22 09:38:37 发布