以下のようにシングルトンを実装しています。
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;
}
デストラクタは privateです。プログラムが終了しようとしているときに、これはオブジェクト theMainInstance に対して呼び出されますか?
これを Visual Studio 6 で試したところ、コンパイル エラーが発生しました。
"cannot access private member declared in class..."
Visual Studio 2010 では、これがコンパイルされ、デストラクタが呼び出されました。
標準によると、ここで何を期待する必要がありますか?
編集:Visual Studio 6の動作はそれほど馬鹿げていないため、混乱が生じます。静的オブジェクトの A のコンストラクターは、A の関数のコンテキストで呼び出されると主張できます。しかし、デストラクタは、同じ関数のコンテキストで呼び出されません。これは、グローバル コンテキストから呼び出されます。