c ++ 11 — порядок уничтожения локальной переменной C ++

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

например.:

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

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

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

44

Решение

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

54

Другие решения

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

  1. Локальные переменные расположены на стек.

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

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

II. О вашем примере

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

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

и когда конец main() Объем функции достигнут:

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

III. более того

стек выглядеть так:

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

Схема стека

19

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

6

Они уничтожаются в обратном порядке распределения, см. этот ТАК вопрос. В данном случае это означает, что x2 будет уничтожен раньше x1,

4

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

2
По вопросам рекламы [email protected]