我正在实现以下单例模式。
我在Visual studio 6中尝试过,但它会给出编译错误。
在Visual Studio 2010中,这段代码被编译并且析构函数被调用。根据标准,这里应该有什么期望呢?
编辑:混淆的原因在于Visual Studio 6的行为并不是如此愚蠢。可以认为静态对象A的构造函数是在A的函数上下文中调用的。但是析构函数不是在同一函数上下文中被调用。它是从全局上下文中调用的。
可能是重复的问题:
在单例类析构函数中无法访问私有成员
我正在以下面的方式实现单例模式。
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的函数上下文中调用的。但是析构函数不是在同一函数上下文中被调用。它是从全局上下文中调用的。