2013-03-08 79 views
-1

我是C++新手,對以下事項有些困惑:DTOR引發的異常

當DTOR引發異常時會發生什麼? 對象是否仍然被銷燬?

在此先感謝。

+0

已經討論過這裏100500次,使用搜索 – 2013-03-08 11:58:43

+0

另外:http://www.parashift.com/c++-faq/dtors-shouldnt-throw.html – Spook 2013-03-08 12:05:54

+0

我編輯它 - 離開只有關於物體是否被破壞的問題 – cookya 2013-03-08 12:29:41

回答

1

一般來說:這是一個壞主意嗎?

,非常糟糕的一個。

不要從析構函數中拋出異常。如果在拋出另一個異常之後拋出異常,但在異常被catch處理程序捕獲之前,您的程序將被迫突然終止。

由於在堆棧展開期間調用堆棧展開時引發異常時,如果其中一個引發另一個異常,則會立即終止您的程序。不太好。

避免析構函數拋出異常(或它們包裝成try/catch塊,這樣你不傳播他們的析構函數外)。這樣做是不好的編程實踐。

從第15.2/C++的11標準的3:

要求,其中將引發異常的路徑上構成從try塊到 點自動對象的析構函數的過程被稱爲「堆棧展開」。如果在堆棧展開期間調用的析構函數在退出時出現異常,則調用std :: terminate(15.5.1)。 [注意:因此,析構函數通常應該捕獲 異常,並且不讓它們傳播出析構函數。末端注]

0

是的,這是一個bad idea。沒有合理的方法來確定你是否可以安全地投擲。