本地范围内的对象以什么顺序被破坏?

时间:2013-08-12 16:46:31

标签: c++ scope destructor

foo之前,bar之后bar会被myFunction() { Foo foo = Foo(); Bar bar = Bar(); return; } 破坏,还是无法保证?

{{1}}

3 个答案:

答案 0 :(得分:7)

它们按照声明的相反顺序销毁。在

{
 Foo foo = Foo();
 Bar bar = Bar();
}
首先构建

foo,然后bar。超出范围时 - bar先破坏,然后foo

答案 1 :(得分:1)

函数的内存称为“堆栈”。就像其他堆叠一样,你放下的最后一件东西,就是你要脱掉的第一件事。

因此,实际上,当函数返回并且本地内存超出范围时,所有局部变量都会以反向顺序进行破坏。

总是如此,你绝对可以依赖它(在同一个线程中)。

答案 2 :(得分:-3)

在继承中它是逆序。在你的情况下,它的创建顺序相同。

 Foo f= new Foo();
 Bar b= new Bar();

f在b

之前被销毁