内嵌类

我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我

们可以在单例类中定义一个这样的静态成员变量,而它的唯一工作就是在析构函数中删除单例类的实例。如下面的代码中的CGarbo类(Garbo意为垃圾工人):
?
class CSingleton:
{
    // 其它成员
public:
    static CSingleton * GetInstance()
private:
    CSingleton(){};
    static CSingleton * m_pInstance;
    class CGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例
    {
    public:
        ~CGarbo()
        {
            if (CSingleton::m_pInstance)
                delete CSingleton::m_pInstance;
        }
    };
    static CGarbo Garbo; // 声明一个静态成员,在程序结束时,系统会调用它的析构函数,注意这里仅仅是声明,还需要在相应的cpp文件中对静态成员进行定义哦。
};

静态成员定义(cpp文件):
CSingleton* CSingleton::m_pInstance = NULL;
CSingleton::CGarbo CSingleton::Garbo;

类CGarbo被定义为CSingleton的私有内嵌类,以防该类被在其它地方滥用。

在程序运行结束时,系统会调用CSingleton的静态成员Garbo的析构函数,该析构函数会删除单例的唯一实例。

你可能感兴趣的:(c++)