【问题标题】:What determines the sequence of object destruction in C++ program?什么决定了 C++ 程序中对象销毁的顺序?
【发布时间】:2013-04-11 12:07:00
【问题描述】:

C++程序是这样的:

class Foo
{ 
    // something here
};

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

     return 0;
}

在g++中已经证明f_Af_B之前构造,在f_B之后解构,f_Bf_C之后解构。什么决定了顺序?和编译器有关吗?

【问题讨论】:

    标签: c++ oop object


    【解决方案1】:

    这将是构造的相反顺序。这是由 C++ 标准指定的。

    【讨论】:

      【解决方案2】:

      C++ 标准规定了顺序。

      第 6.7/2 段:

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

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

      第 6.6/2 段:

      从范围退出时(无论如何完成),具有自动 在该范围内构建的存储期限(3.7.3)是 以与其构造相反的顺序销毁。

      【讨论】:

      • “这意味着[自动变量]的构造顺序与源中列出的变量顺序相同”不能正确。但是你可以添加一个像“一般”这样的狡猾的词。
      • @Cheersandhth.-Alf:我不确定我明白你的意思。我专门指的是上面显示的来源,你认为我应该说清楚吗?
      • 是的,在对前后列出的标准语言的明显解释中对“源”的通用引用,根本没有让我想到 OP 的代码
      • @Cheersandhth.-Alf:完成。感谢您的反馈。
      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2012-01-21
      • 2013-04-07
      • 2019-06-30
      • 1970-01-01
      • 2011-01-13
      相关资源
      最近更新 更多