是什么决定了C++程序中对象破坏的顺序?

Gar*_*auh 0 c++ oop object

C++程序是这样的:

class Foo
{ 
    // something here
};

int main ()
{
     Foo f_A;
     Foo f_B;
     Foo f_C;
     //do something here

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

事实已经证明,f_A之前的构造f_B,解构之后f_B,以及在g ++ 之后f_B解构f_C.确定序列的是什么?编译器是否相关?

joh*_*ohn 6

这将是与建筑相反的顺序.这由C++标准指定.


Jon*_*Jon 5

C++标准指定顺序.

第6.7/2段:

每次执行声明语句时,都会初始化具有自动存储持续时间(3.7.3)的变量.块中声明的具有自动存储持续时间的变量在从块(6.6)退出时被销毁.

这意味着构造的顺序与变量在上面的源中列出的顺序相同,这很重要,因为...

第6.6/2段:

在从范围退出(但是已完成)时,在该范围内构造的具有自动存储持续时间(3.7.3)的对象将按其构造的相反顺序销毁.