該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