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

  1. Local variables are allocated on the Stack.

  2. The Stack is based on a LIFO (Last-In-First-Out) pattern.

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

Stack scheme