是否存在在C ++(11)中解除分配局部变量的已定义顺序? 更简洁:在同一范围内两个局部变量的析构函数的副作用会以哪种顺序变为可见?
e.g:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
主要返回时是x1
还是x2
是否被销毁?或者C ++ 11中的订单是否未定义?
答案 0 :(得分:58)
在每个类别的存储类中(动态分配的对象除外),对象以与构造相反的顺序被破坏。
答案 1 :(得分:21)
<强>予。关于本地变量
答案 2 :(得分:6)
这是Stack Data Structure
行为,因此局部变量在Stack中存储为LIFO (Last-In-First-Out)
数据结构,您可以想象在LIFO数据结构中,添加到结构中的最后一个变量必须是第一个即将被删除。变量从removed
到堆栈的reverse order
到它们的添加顺序。
答案 3 :(得分:4)
它们以反向分配顺序销毁,请参阅this SO question。在这种情况下,这意味着x2
将在x1
之前销毁。
答案 4 :(得分:2)
它们将按照相反的构造顺序销毁。
答案 5 :(得分:0)
How to embed Tcl in C applications
isocpp.org有一个有关此主题的常见问题解答,并说它以相反的顺序。我认为当提出这个原始问题时,官方网站就不存在了。