Существует ли определенный порядок, в котором локальные переменные освобождаются в C ++ (11)?
Чтобы быть более кратким: в каком порядке будут видны побочные эффекты деструкторов двух локальных переменных в одной области видимости?
например.:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
Является x1
или же x2
уничтожается первым, когда возвращается main, или порядок не определен в C ++ 11?
Внутри каждой категории классов хранения (кроме динамически распределяемых объектов) объекты уничтожаются в обратном порядке построения.
I. О локальных переменных
Локальные переменные расположены на стек.
стек основан на LIFO
(Last-In-First-Out
) шаблон.
Таким образом, переменные уничтожаются и освобождаются в обратном порядке размещения и построения.
II. О вашем примере
Ваша функция main()
называется:
x1
выделен и построен на стек,x2
выделен и построен на стеки когда конец main()
Объем функции достигнут:
x2
уничтожен и освобожден от стек,x1
уничтожен и освобожден от стекIII. более того
стек выглядеть так:
(Поведение стек кажется более понятным со схемой)
Это Stack Data Structure
поведение, поэтому локальные переменные хранятся в стеке как LIFO (Last-In-First-Out)
Структура данных. Вы можете представить, что в структуре данных LIFO последняя переменная, добавленная в структуру, должна быть первой, которая будет удалена. переменные removed
из стека в reverse order
в порядке их добавления.
Они уничтожаются в обратном порядке распределения, см. этот ТАК вопрос. В данном случае это означает, что x2
будет уничтожен раньше x1
,
Они будут уничтожены в обратном порядке их строительства.