C++ variable locale à la destruction de l'ordre
Est-il défini l'ordre dans lequel les variables locales sont désalloués en C++ (11) ?
Pour être plus concis: Dans l'ordre effets secondaires de la destructeurs de deux variables locales dans le même champ d'application deviennent visibles?
par exemple:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
Est x1
ou x2
détruits première principale en cas de retours ou de la commande est pas défini en C++11?
Vous devez vous connecter pour publier un commentaire.
Sein de chaque catégorie de classes de stockage (sauf les objets alloués dynamiquement), les objets sont détruits dans l'ordre inverse de la construction.
I. à Propos des variables locales
Les variables locales sont attribués sur la Pile.
La Pile est basé sur un
LIFO
(Last-In-First-Out
) modèle.Si les variables sont détruits et libérés dans l'ordre inverse de la répartition et de la construction.
II. Sur votre exemple
Votre fonction
main()
est appelé:x1
est alloué et construit sur le Pile,x2
est alloué et construit sur le Pileet lorsque la fin de la
main()
portée de la fonction est atteint:x2
est détruit et libéré de la Pile,x1
est détruit et libéré de la PileIII. En outre
La Pile ressembler à ceci:
(Comportement de Pile semble plus compréhensible avec un régime)
sub %esp, <size>
et à la sortie il neadd %esp, <size>
. Donc, en d'autres termes, tous les nécessaires de l'espace est alloué en un seul coup (seulementalloca()
de façon dynamique réduire le pointeur de pile plus loin.)x1
etx2
peut être attribuée dans le cadre de la pile dans n'importe quel ordre. Ou même pas du tout; par exemple, ils peuvent être vides des structures.C'est un
Stack Data Structure
comportement, de sorte que les variables locales dans les magasins de la Pile en tant queLIFO (Last-In-First-Out)
structure de données, vous pouvez imaginer que, dans un PRINCIPE de structure de données, la dernière variable ajoutée à la structure doit être le premier à être supprimé. les variables sontremoved
de la pile dans lereverse order
à l'ordre de leur ajout.Ils sont détruits dans le sens inverse de l'allocation de commande, voir cette SORTE de question. Dans ce cas, cela signifie que
x2
sera détruit avantx1
.Ils seront détruits à la suite d'un ordre inverse de leur construction.