我必须写一个单例类,然后按照网络的说法编写类。有一个内部类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;
}
答案 0 :(得分:0)
静态类成员在程序终止时被销毁,就像所有静态对象一样。然而,必须定义它们,你的例子忽略了它们。您只声明该成员。定义必须仍然出现在类名称空间范围之外。所以要解决它:
class Singleton
{
public:
class Collection
{
public:
~Collection()
{
OutputDebugString(_T("Call Destructor\n"));
}
};
static Collection collect;
};
Singleton::Collection Singleton::collect;
只需定义它。