该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
后解构?它与编译器相关吗?
该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
后解构?它与编译器相关吗?
C++标准指定了顺序。
段落6.7/2:
变量与自动存储持续时间(3.7.3)每个 时间执行它们的声明语句被初始化。在块中声明的自动 存储持续时间的变量在从 块(6.6)退出后被销毁。
这意味着施工的顺序是一样的变量在你上面的来源,这是因为重要的列出的顺序...
第6.6/2:
在从示波器退出(但是已完成)时,在该示波器中构建的具有自动 存储持续时间(3.7.3)的对象是以其结构的相反顺序销毁的对象 。
“这意味着[自动变量]的构造顺序与变量在源代码中列出的顺序相同”不可能是正确的。但是你可以添加一个像“一般”的黄鼠狼字。 – 2013-04-11 12:15:50
@ Cheersandhth.-Alf:不知道我明白你的观点。我特别提到了上面显示的来源,你认为我应该明确吗? – Jon 2013-04-11 13:02:24
是的,在对前面和后面列出的标准的明显解释中对“源”的通用引用,根本没有让我想到OP的代码 – 2013-04-11 13:05:35
这将是相反的建设顺序。这由C++标准规定。
堆栈我相信 – Alon 2013-04-11 12:08:59