Wie heißen die privaten Destruktoren statischer Objekte? [Duplikat]
Mögliche Duplikate:
Kein Zugriff auf privates Mitglied im Singleton-Klassendestruktor
Ich implementiere einen Singleton wie folgt.
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;
}
DasDestruktor ist privat. Wird dies für das Objekt theMainInstance aufgerufen, wenn das Programm beendet wird?
Ich habe dies in Visual Studio 6 versucht, es gab einen Kompilierungsfehler.
"cannot access private member declared in class..."
Im Visual Studio 2010 wurde dies kompiliert und dieDestruktor wurde aufgerufen.
Was soll die Erwartung hier laut Norm sein?
Bearbeiten: Die Verwirrung entsteht, da Visual Studio 6 Verhalten nicht so dumm ist. Es kann argumentiert werden, dass der Konstruktor von A für das statische Objekt im Kontext einer Funktion von A aufgerufen wirddestructor wird nicht im Kontext derselben Funktion aufgerufen. Dies wird aus einem globalen Kontext heraus aufgerufen.