要点:
1)静态变量在应用程序退出时会被销毁,也在此时其析构函数会被调用;
2)静态指针的销毁不会伴随析构函数的调用,因此不能指望static sigleton* _instance的销毁来触发析构函数;
3)在类的析构函数中delete自己会造成无限迭代循环,因此不能在自己的析构函数中 delete _instance 企图销毁单例。
例子:
class CommonUse : public QObject
{
class GC
{
~GC(){
if(CommonUse::_instance){
delete CommonUse::_instance;
}
}
};
Q_OBJECT
public:
explicit CommonUse(QObject *parent = nullptr);
static CommonUse* getCommonUse();
private:
static CommonUse* _instance;
static GC _gc; //应用程序终结时,会销毁所有static变量,因此会触发GC的析构函数
};