2014-06-12 186 views

回答

3

析構函數將不會被調用,因爲foo對象沒有被認爲是完全建立,直到一個構造函數執行完畢(注意,這意味着如果你拋出一個委託給不同構造函數的構造函數,然後將調用的析構函數)。從構造函數中拋出不是未定義的行爲。

+0

這個答案似乎收縮quantdev的 –

+0

@YogiBear這個答案是正確的。幸運的是,你很容易測試自己。 – Simple

+0

我做了測試,但我從老闆那裏繼承了「未定義行爲」的緊張情緒! –

1

對象的生命週期從其構造函數完成其執行時開始。這意味着,在構造函數執行結束之前,該對象從不存在。所以,沒有活的對象,因此,沒有析構函數可以調用。

因此,沒有未定義的行爲,除非創建異常對象引發另一個異常。在這種情況下,程序中斷。但是,在異常之前完全構造的任何其他對象都會被適當地破壞,包括基本子對象,其他成員對象,在引發異常的函數的相同範圍內聲明的本地對象,以及之前範圍的任何其他對象, t趕上那個例外。

檢查出來,堆棧展開(在stackoverflow,谷歌和維基百科,按照優先順序)。

相關問題