Como os destruidores privados de objetos estáticos são chamados? [duplicado]
Duplicata Possível:
Não é possível acessar o membro particular no destrutor de classe singleton
Estou implementando um singleton como abaixo.
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;
}
odestruidor é privado. Isso será chamado pelo objeto theMainInstance quando o programa estiver prestes a terminar?
Eu tentei isso no Visual Studio 6, deu um erro de compilação.
"cannot access private member declared in class..."
No visual studio 2010, isso foi compilado e odestruidor foi chamado.
Qual deve ser a expectativa aqui de acordo com o padrão?
Edit: A confusão surge uma vez que o comportamento do Visual Studio 6 não é tão burro. Pode-se argumentar que o construtor de A para o objeto estático é chamado no contexto de uma função de A. Mas odestruidor não é chamado no contexto da mesma função. Isso é chamado de um contexto global.