C++单线程的单例模式
一、懒汉模式
class cSingle //懒汉模式
{
public:
static cSingle* getInstance()
{
if (myInstance == nullptr)
{
myInstance = new cSingle();
}
return myInstance;
}
private:
cSingle() {};
static cSingle* myInstance;
class cGarbage
{
public:
~cGarbage()
{
if (cSingle::myInstance)
{
delete cSingle::myInstance;
cSingle::myInstance = nullptr;
std::cout << "garbage析构函数执行" << std::endl;
}
}
};
static cGarbage garbage;
};
cSingle* cSingle::myInstance = nullptr;
cSingle::cGarbage cSingle::garbage;
注意懒汉模式是在多线程下需要加锁防止多次创建对象的,不能直接在cSingle的析构函数内执行delete的原因是delete会调用对象的析构函数,这样会导致死递归导致程序异常。
二、饿汉模式
class cSingle
{
public:
static cSingle* getInstance()
{
return myInstance;
}
private:
static cSingle* myInstance;
class cGarbage
{
public:
cGarbage()
{
std::cout << "cGarbage的构造函数被执行" << std::endl;
}
~cGarbage()
{
delete cSingle::myInstance;
cSingle::myInstance = nullptr;
std::cout << "garbage析构函数执行" << std::endl;
}
};
static cGarbage garbage;
};
cSingle* cSingle::myInstance = new cSingle();
cSingle::cGarbage cSingle::garbage;
饿汉模式不需要考虑多线程的问题,因为在程序的初始化已经创建了对象不会存在多次创建对象的问题。