可能重复:
无法访问单例类析构函数中的私有成员
我正在实现一个单例,如下所示。
class A
{
public:
static A& instance();
private:
A(void)
{
cout << "In the constructor" << endl;
}
~A(void)
{
cout << "In the destructor" << endl;
}
};
A& A::instance()
{
static A theMainInstance;
return theMainInstance;
}
int main()
{
A& a = A::instance();
return 0;
}
析构函数是私有的。当程序即将终止时,会为对象 theMainInstance 调用它吗?
我在 Visual Studio 6 中试过这个,它给出了一个编译错误。
"cannot access private member declared in class..."
在 Visual Studio 2010 中,它被编译并调用了析构函数。
根据标准,这里的期望应该是什么?
编辑:由于 Visual Studio 6 的行为不是那么愚蠢,因此出现了混淆。可以说,静态对象的 A 的构造函数是在 A 的函数上下文中调用的。但析构函数不是在同一个函数的上下文中调用的。这是从全局上下文中调用的。