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?

43
demandé sur gexicide 2013-02-04 17:57:59

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.

54
répondu James Kanze 2013-02-04 14:00:33

I. A propos des variables locales

  1. les variables locales sont attribuées sur la Stack .

  2. le Stack est basé sur un LIFO ( Last-In-First-Out ) pattern.

  3. 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)

Stack scheme

17
répondu Axel Borja 2015-09-14 13:39:13

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.

6
répondu Reza Ebrahimi 2013-03-13 20:31:18

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 .

4
répondu PrisonMonkeys 2017-05-23 12:34:16

ils seront détruits selon un ordre inverse de leur construction.

2
répondu UmNyobe 2013-02-04 13:59:53