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

时间:2013-04-11 12:07:01

标签: c++ oop object

C ++程序是这样的:

class Foo
{ 
    // something here
};

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

     return 0;
}

已经证明,在f_A之前构建的f_Bf_B之后解构,而f_B在g ++中f_C之后解构。确定序列 ?它与编译器有关吗?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

C ++标准指定了订单。

第6.7 / 2段:

  

每个都初始化具有自动存储持续时间(3.7.3)的变量   他们的声明声明被执行的时间。自动变量   块中声明的存储持续时间在退出时被销毁   块(6.6)。

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

第6.6 / 2段:

  

退出范围(无论多么已完成),具有自动对象   在该范围内构建的存储持续时间(3.7.3)   按照与其建造相反的顺序销毁。