2009-01-19 60 views

回答

7

它並不妨礙你從析構函數中拋出異常。編譯器仍然會讓你這樣做。所不同的是,如果你確實允許一個異常從那個析構函數中轉義出來,你的程序會立即調用unexpected。該函數調用任何指向unexpected_handler的點,默認爲terminate。所以除非你做了一些事情來處理意外的異常,否則你的程序就會終止,這並不是一個壞主意。畢竟,如果這個異常真的是意外的,那麼你的程序無論如何也沒有什麼能夠處理它。

這不是關於析構函數的特別之處;相同的規則適用於所有方法的異常規範。

3

這不是一個可怕的想法。如果你在沒有任何異常被傳播的情況下扔進了Dtor,你會立即放棄,這讓你知道你已經忘記了製作一個真正的非投擲Dtor。

另一方面,如果你拋棄了throw spec,那麼當事件拋出時,你只會知道你的糟糕的dtor實現。

相關問題