C++ local variable destruction order
Is there a defined order in which local variables are deallocated in C++ (11) ? To be more concise: In which order will side effects of the destructors of two local variables in the same scope become visible?
e.g.:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
Is x1
or x2
destroyed first when main returns or is the order undefined in C++11?
Solution 1:
Within each category of storage classes (except dynamically allocated objects), objects are destructed in the reverse order of construction.
Solution 2:
I. About local variables
Local variables are allocated on the Stack.
The Stack is based on a
LIFO
(Last-In-First-Out
) pattern.So variables are destroyed and deallocated in the reverse order of allocation and construction.
II. About your example
Your function main()
is called:
-
x1
is allocated and constructed on the Stack, -
x2
is allocated and constructed on the Stack
and when the end of the main()
function scope is reached:
-
x2
is destroyed and deallocated from the Stack, -
x1
is destroyed and deallocated from the Stack
III. Moreover
The Stack look like this:
(Behaviour of the Stack seems more understandable with a scheme)