2013-04-11 72 views
0

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

class Foo 
{ 
    // something here 
}; 

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

    return 0; 
} 

已经证明f_A,这f_B之前构建体,f_B解构后,和在f_B G ++。何确定序列f_C后解构?它与编译器相关吗?

+0

堆栈我相信 – Alon 2013-04-11 12:08:59

回答

5

C++标准指定了顺序。

段落6.7/2:

变量与自动存储持续时间(3.7.3)每个 时间执行它们的声明语句被初始化。在块中声明的自动 存储持续时间的变量在从 块(6.6)退出后被销毁。

这意味着施工的顺序是一样的变量在你上面的来源,这是因为重要的列出的顺序...

第6.6/2:

在从示波器退出(但是已完成)时,在该示波器中构建的具有自动 存储持续时间(3.7.3)的对象是以其结构的相反顺序销毁的对象 。

+0

“这意味着[自动变量]的构造顺序与变量在源代码中列出的顺序相同”不可能是正确的。但是你可以添加一个像“一般”的黄鼠狼字。 – 2013-04-11 12:15:50

+0

@ Cheersandhth.-Alf:不知道我明白你的观点。我特别提到了上面显示的来源,你认为我应该明确吗? – Jon 2013-04-11 13:02:24

+0

是的,在对前面和后面列出的标准的明显解释中对“源”的通用引用,根本没有让我想到OP的代码 – 2013-04-11 13:05:35

6

这将是相反的建设顺序。这由C++标准规定。