本文介绍静态成员变量的两个特殊属性:
1、程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。
2、static成员变量是在初始化(而不是在类声明时候)才定义出来的,如果没有对静态成员变量进行初始化,该静态成员变量是没有意义的;
如:
class CSingle
{
private:
CSingle()
{
}
static CSingle *m_pInstance;
class CDel//它的唯一工作就是在析构函数中删除CSingle的实例
{
public:
~<span style="font-family: Arial, Helvetica, sans-serif;">CDel</span><span style="font-family: Arial, Helvetica, sans-serif;">()</span>
{
printf("del\n");
if(<span style="font-family: Arial, Helvetica, sans-serif;">CSingle</span><span style="font-family: Arial, Helvetica, sans-serif;">::m_pInstance)</span>
delete CSingle::m_pInstance;
}
};
public:
static CDel <span style="font-family: Arial, Helvetica, sans-serif;">Del; //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数</span>
public:
static CSingle* GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingle();
return m_pInstance;
}
void Pintf_Ex(void)
{
printf("....\n");
}
};
CSingle* CSingle::m_pInstance = NULL;
int main()
{
CSingle*ps = CSingle::GetInstance();
}
加CSingle::CDelCSingle::Del;问题就可以解决了,此时当退出程序时,就会调用 CDel的析构函数了。