2

会在 before , afterfoo被破坏,还是没有任何保证?barbar

myFunction()
{
    Foo foo = Foo();
    Bar bar = Bar();
    return;
}
4

3 回答 3

7

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

{
 Foo foo = Foo();
 Bar bar = Bar();
}

foo先构造,再构造bar。超出范围时-bar首先破坏,然后foo.

于 2013-08-12T16:47:42.410 回答
1

函数的内存称为“堆栈”。和其他所有堆栈一样,你放的最后一件事是你要起飞的第一件事。

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

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

于 2013-08-12T16:56:44.143 回答
-3

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

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

f 在 b 之前被销毁

于 2013-08-12T16:52:20.913 回答