Destruktoraufruf für globale und klassenstatische Variablen in C
In C werden Objekte normalerweise im Stapelspeicher zugewiesen (für lokale Variablen). und Heap-Speicher (für dynamisch zugewiesene Variablen). Globale Variablen und statische Klassenvariablen werden jedoch im Datenabschnitt des Programms zugewiesen, was die Frage aufwirft: Wann werden ihre Destruktoren aufgerufen?
Gemäß dem C 03-Standard (§ 3.6.3) sind die Destruktoren für Initialisierte Objekte mit statischer Speicherdauer werden bei der Rückkehr von der Hauptfunktion und beim Aufruf der Exit-Funktion aufgerufen. Diese Objekte werden in der umgekehrten Reihenfolge ihres Konstruktorabschlusses oder dynamischen Initialisierungsabschlusses zerstört.
Außerdem ist ihr Initialisierungs- und Zerstörungsverhalten für statische Datenelemente der Klasse (§ 9.4.2 7) analog zu dem von Nicht-Objekten. lokale Objekte.
Wenn ein Destruktor jedoch kein beobachtbares Verhalten aufweist (d. h. keine Nebenwirkungen ausführt), kann er möglicherweise nicht aufgerufen werden. Dies liegt daran, dass der Compiler den Code optimieren kann, um den Aufruf unnötiger Destruktoren zu vermeiden, wie in Terry Mahaffeys Antwort auf „Ist ein C-Destruktor garantiert nicht vor dem Ende des Blocks aufgerufen?“ beschrieben.
Das obige ist der detaillierte Inhalt vonWann werden Destruktoren für globale und klassenstatische Variablen in C aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!