当类的静态成员被销毁时

时间:2018-02-01 10:15:33

标签: c++ static singleton

我必须写一个单例类,然后按照网络的说法编写类。有一个内部类Collection旨在破坏我的单例类的静态成员。据说静态成员将在程序耗尽后被销毁。也就是说,将调用类Collection的析构函数,并在VS的输出窗口中看到“调用析构函数”。但是在程序退出后,我看不到这些话。静态成员收集没有被破坏。这是怎么发生的?

class Singleton  
{  
public:
    class Collection  
    {
    public:  
        ~Collection()  
        {  
            OutputDebugString(_T("Call Destructor\n"));  
        }  
    };  
    static Collection collect;  
};  

int _tmain(int argc, _TCHAR* argv[])  
{  
    Singleton s;  
    return 0;  
}  

1 个答案:

答案 0 :(得分:0)

静态类成员在程序终止时被销毁,就像所有静态对象一样。然而,必须定义它们,你的例子忽略了它们。您只声明该成员。定义必须仍然出现在类名称空间范围之外。所以要解决它:

class Singleton  
{  
public:
    class Collection  
    {
    public:  
        ~Collection()  
        {  
            OutputDebugString(_T("Call Destructor\n"));  
        }  
    };  
    static Collection collect;  
};  

Singleton::Collection Singleton::collect;

只需定义它。