frage ich mich, dass um zwischen Zerstörung des globalen Objekts und atexit
in C sure kann ++Auftrag zwischen Zerstörung des globalen Objekts und atexit in C++
ich ein globales Objekt haben und registrieren atexit
Funktion wie unten:
static MyClass g_class;
void onExit()
{
// do some destruction
}
int main()
{
atexit(onExit);
return 0;
}
Ich habe gefunden onExit()
wird vor MyClass::~MyClass()
in Visual Studio 2012 und gcc4.7.2 aufgerufen. Bin ich sicher, dass onExit
immer vor einem globalen Objekt (wie g_class
) Zerstörung aufgerufen wird?
Ich wundere mich global Objekt registrieren und atexit
Registerauftrag verwenden gleichen Auftrag Tabelle. Oder gibt es keine Beziehung zwischen globalen Objekt Reihenfolge und atexit
Reihenfolge?
Bearbeitet: Leider habe ich einen Fehler geschrieben. Ich bin so verwirrt, während ich Beispielcode aufräume. onExit()
wird vor ~ MyClass() aufgerufen.
Ich vermute, dass Reihenfolge nicht 100% sicher ist, definiert zu werden. Warum kümmert dich das? –
Erstellen Sie ein weiteres globales Objekt vor 'MyClass' und rufen Sie' atexit (onExit) 'in seinem Konstruktor auf, um es zu überprüfen. – lapk
Möchten Sie die Lebensdauer von Objekten steuern, verwenden Sie dynamische Objekte. – PiotrNycz