Orden de destrucción variable local C++
c++11 destructor (5)
Dentro de cada categoría de clases de almacenamiento (excepto objetos dinámicamente asignados), los objetos se destruyen en el orden inverso de construcción.
¿Hay un orden definido en el que las variables locales se desasignan en C ++ (11)? Para ser más conciso: ¿En qué orden serán visibles los efectos secundarios de los destructores de dos variables locales en el mismo ámbito?
p.ej:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
¿Se destruye x1
o x2
primero cuando el retorno principal o el orden no está definido en C ++ 11?
Se destruyen en orden inverso de asignación, vea esta pregunta SO . En este caso, esto significa que x2
se destruirá antes de x1
.
Se trata de un comportamiento de Stack Data Structure
, por lo que las variables locales almacenan en pila como estructura de datos LIFO (Last-In-First-Out)
, se puede imaginar que en una estructura de datos LIFO, la última variable añadida a la estructura debe ser la primera ser eliminado. las variables se removed
de la pila en reverse order
al orden de su adición.
Serán destruidos siguiendo un orden inverso a su construcción.
I. Acerca de las variables locales
Las variables locales se asignan en la pila .
La pila se basa en un patrón
LIFO
(Last-In-First-Out
).Entonces las variables se destruyen y se desasignan en el orden inverso de asignación y construcción.
II. Acerca de tu ejemplo
Su función main()
se llama:
-
x1
se asigna y se construye en la pila , -
x2
se asigna y se construye en la pila
y cuando se alcanza el final del alcance de la función main()
:
-
x2
es destruido y desasignado de la pila , -
x1
es destruido y desasignado de la pila
III. Además
La pila se ve así:
(El comportamiento de la pila parece más comprensible con un esquema)