Подтвердить что ты не робот

Локальный порядок уничтожения локальной переменной С++

Существует ли определенный порядок, в котором локальные переменные освобождаются в С++ (11)? Чтобы быть более кратким: в каком порядке будут видны побочные эффекты деструкторов двух локальных переменных в одной области?

например:.

struct X{
  ~X(){/*do something*/}
}

int main(){
   X x1;
   X x2;
   return 0;
}

Является ли x1 или x2 уничтожен первым, когда main возвращает или является порядком undefined в С++ 11?

4b9b3361

Ответ 1

В каждой категории классов хранения (кроме динамически распределенных объектов) объекты разрушаются в обратном порядке построения.

Ответ 2

I. О локальных переменных

  • Локальные переменные выделяются в стеке.

  • Стек основан на шаблоне LIFO (Last-In-First-Out).

  • Таким образом, переменные уничтожаются и освобождаются в порядке, обратном порядку размещения и построения.

II. Пример вашего примера

Вызывается функция main():

  • x1 выделяется и строится на стеке,
  • x2 выделяется и создается на стеке

и когда достигнут конец области main():

  • x2 уничтожается и освобождается от стека,
  • x1 уничтожается и освобождается из стека

III. Более того

Стек выглядит следующим образом:

(Поведение стека кажется более понятным по схеме)

Схема стека

Ответ 3

Это поведение Stack Data Structure, поэтому локальные переменные хранятся в Stack как структура данных LIFO (Last-In-First-Out), вы можете себе представить, что в структуре данных LIFO последняя переменная, добавленная в структуру, должна быть первой, которая будет удалена. переменные removed из стека в reverse order соответствуют порядку их добавления.

Ответ 4

Они уничтожаются в порядке обратного выделения, см. этот вопрос SO. В этом случае это означает, что x2 будет уничтожен до x1.

Ответ 5

Они будут уничтожены после обратного порядка их построения.