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:
-
x1
est attribué et construit sur la pile , -
x2
est attribué et construit sur la pile "
et quand la fin de la main()
la portée de la fonction est atteinte:
-
x2
est détruit et désalloué de la Stack , -
x1
est 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.