Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当类的静态成员被销毁时_C++_Static_Singleton - Fatal编程技术网

C++ 当类的静态成员被销毁时

C++ 当类的静态成员被销毁时,c++,static,singleton,C++,Static,Singleton,我必须写一个单例类,我写的类网络说如下。有一个内部类集合旨在销毁我的singleton类的静态成员。据说程序运行完后,静态成员将被销毁。也就是说,将调用类集合的析构函数,并且可以在VS的输出窗口中看到“Call destructor”。但是在程序退出后,我看不到这些单词。静态成员collect尚未被销毁。这是怎么发生的 class Singleton { public: class Collection { public: ~Collect

我必须写一个单例类,我写的类网络说如下。有一个内部类集合旨在销毁我的singleton类的静态成员。据说程序运行完后,静态成员将被销毁。也就是说,将调用类集合的析构函数,并且可以在VS的输出窗口中看到“Call destructor”。但是在程序退出后,我看不到这些单词。静态成员collect尚未被销毁。这是怎么发生的

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;  
}  

静态类成员在程序终止时被销毁,就像所有静态对象一样。但是,必须定义它们,而您的示例忽略了这一点。您只需声明成员。定义必须仍然出现在类的命名空间范围之外。因此,要解决这个问题:

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

Singleton::Collection Singleton::collect;

只需定义它。

@StoryTeller:这是一个答案,不是评论@马丁邦纳-好的,我明白了