2013-04-11 107 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++標準規定。

相關問題