在foo
之前,bar
之后bar
会被myFunction()
{
Foo foo = Foo();
Bar bar = Bar();
return;
}
破坏,还是无法保证?
{{1}}
答案 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
之前被销毁