C ++ lokale Variable Zerstörungsreihenfolge
Gibt es eine definierte Reihenfolge, in der lokale Variablen werden freigegeben, in C++ (11) ?
Um präziser: In welcher Reihenfolge werden die Nebenwirkungen der Destruktoren von zwei lokalen Variablen in dem gleichen Umfang sichtbar werden?
z.B.:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
Ist x1
oder x2
zerstört den ersten, wenn die main zurück, oder ist die Reihenfolge undefiniert, in C++11?
InformationsquelleAutor der Frage gexicide | 2013-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Innerhalb jeder Kategorie von storage-Klassen (außer dynamisch alloated Objekte), Objekte sind zerstört, in der umgekehrten Reihenfolge des Aufbaus.
InformationsquelleAutor der Antwort James Kanze
I. Über lokale Variablen
Lokalen Variablen zugewiesen werden, auf die Stack.
Den Stack basiert auf einer
LIFO
(Last-In-First-Out
) Muster.Also Variablen werden zerstört und aufgehoben in der umgekehrten Reihenfolge der Zuweisung und Konstruktion.
II. Über dein Beispiel
Ihre Funktion
main()
heißt:x1
zugeordnet ist, und konstruiert auf der Stack,x2
zugeordnet ist, und konstruiert auf der Stackund wenn das Ende der
main()
Funktionsumfang erreicht ist:x2
zerstört und freigegeben von der Stack,x1
zerstört und freigegeben von der StackIII. Außerdem
Den Stack wie folgt Aussehen:
(Verhalten der Stack scheint mehr nachvollziehbar mit Schema)
InformationsquelleAutor der Antwort Axel Borja
Dies ist ein
Stack Data Structure
Verhalten, so dass lokale Variablen speichert im Stack alsLIFO (Last-In-First-Out)
Daten-Struktur, können Sie sich vorstellen, dass in einem LIFO-Datenstruktur, die Letzte variable Hinzugefügt, um die Struktur muss zuerst entfernt werden. Variablen sindremoved
aus dem Stapel in derreverse order
um die Reihenfolge Ihrer Zugabe.InformationsquelleAutor der Antwort Reza Ebrahimi
Werden Sie zerstört in umgekehrter Zuordnung bestellen, siehe diese Frage ALSO. In diesem Fall bedeutet dies, dass
x2
zerstört werden, bevorx1
.InformationsquelleAutor der Antwort PrisonMonkeys
Werden Sie zerstört nach einem umgekehrten Reihenfolge Ihrer Konstruktion.
InformationsquelleAutor der Antwort UmNyobe