c++单例模式为什么不在析构函数中释放静态的单例对象,而要加一个内嵌类

2025-03-10 23:22:30
推荐回答(4个)
回答1:

析构里delete实例,这个实例释放是会掉自己的析构的,析构里又有delete,这样就无限递归了

回答2:

单件的实例是存储在堆中的,不会自动析构

回答3:

class GarbageCollector
{
public:
GarbageCollector()
{
qDebug() << "init GarbageCollector";
}

~GarbageCollector()
{

if (Variable_Manager::sVariableManager != nullptr)
{
qDebug() << "del GarbageCollector";
delete Variable_Manager::sVariableManager;
Variable_Manager::sVariableManager = nullptr;
}
}
};
static GarbageCollector gc;//作为静态,会在程序内生存。作为栈对象,会在程序结束自动析构(顺便把sVariableManager堆对象带走)

代码内嵌在单例的类中

回答4:

单例模式通过类本身来管理其唯一实例,这种特性提供了解决问题的方法。唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供 对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它的返回值是唯 一实例的指针。
定义如下:
class CSingleton
{
//其他成员
public:
static CSingleton* GetInstance()
{
if ( m_pInstance == NULL ) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
private:
CSingleton(){};
static CSingleton * m_pInstance;
};