C++ ordre de destruction des variables locales
y a-t-il un ordre défini dans lequel les variables locales sont désallouées en C++ (11) ? Pour être plus concis: dans quel ordre les effets secondaires des destructeurs de deux variables locales de même envergure deviendront-ils visibles?
p.ex.:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
est x1 ou x2 détruit en premier lorsque main retourne ou l'ordre n'est pas défini en C++11?
5 réponses
dans chaque catégorie de classes de stockage (à l'exception des objets dynamiquement alliés), les objets sont détruits dans l'ordre inverse de leur construction.
I. A propos des variables locales
-
les variables locales sont attribuées sur la Stack .
-
le Stack est basé sur un
LIFO(Last-In-First-Out) pattern. -
ainsi, les variables sont détruites et attribuées dans l'ordre inverse de l'attribution et de la construction.
II. À propos de votre exemple
votre fonction main() s'appelle:
-
x1est attribué et construit sur la pile , -
x2est attribué et construit sur la pile "
et quand la fin de la main() la portée de la fonction est atteinte:
-
x2est détruit et désalloué de la Stack , -
x1est détruit et désalloué de la Stack
III. En outre
Le Pile ressembler à ceci:
(comportement du Pile semble plus compréhensible avec un schéma)
c'est un comportement Stack Data Structure , donc les variables locales emmagasinent dans la pile la structure de données LIFO (Last-In-First-Out) , vous pouvez imaginer que dans une structure de données LIFO, la dernière variable ajoutée à la structure doit être la première à être supprimée. les variables sont removed de la pile dans le reverse order à l'ordre de leur addition.
ils sont détruits dans l'ordre d'attribution inverse, voir cette question SO . Dans ce cas, cela signifie que x2 sera détruit avant x1 .
ils seront détruits selon un ordre inverse de leur construction.