gex*_*ide 51 c++ destructor local-variables c++11
是否存在在C++(11)中解除分配局部变量的已定义顺序?更简洁:在同一范围内两个局部变量的析构函数的副作用会以何种顺序变为可见?
例如:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是x1或x2毁坏第一主时返回或在C++ 11未定义的顺序?
Jam*_*nze 62
在每个类别的存储类中(动态分配的对象除外),对象以与构造相反的顺序被破坏.
Axe*_*rja 22
I.关于局部变量
局部变量在堆栈上分配.
所述堆栈是基于LIFO(Last-In-First-Out)图案.
因此,变量以分配和构造的相反顺序被销毁和解除分配.
II.关于你的例子
您的函数main()被称为:
x1在堆栈上分配和构建,x2在堆栈上分配和构造当main()达到功能范围的结尾时:
x2被摧毁并从堆栈中释放出来,x1被破坏并从堆栈中解除分配III.此外
该协议栈是这样的:
(使用方案,堆栈的行为似乎更容易理解)
这是一种Stack Data Structure行为,因此局部变量在Stack中存储为LIFO (Last-In-First-Out)数据结构,您可以想象在LIFO数据结构中,添加到结构的最后一个变量必须是要删除的第一个变量.变量是removed从堆栈中添加reverse order到它们的顺序.