析構函數拋出異常會導致後面的清理資源語句得不到機會執行,會導致資源泄漏。
結論:
a.析構函數絕對不要吐出異常。如果一個被析構函數調用的函數可能拋出異常,析構函數應該捕捉任何異常,然後吞下(不傳播)他們或者結束程序。
b.如果客戶需要對某個操作函數運行期間拋出異常做出反應,那麼class應該提供一個普通函數(而非在析構函數中)執行該操作,例如:
對於一個連接對象DBConnect他應該公開一個close函數,這個函數可能會拋出異常,應該讓客戶去調用close,而不是自己在析構函數中調用close。