More Effective C++ 中說應該避免異常信息傳遞到析構函數之外。因為有些時候異常處理的時候會調用析構函數,如果這個時候再有異常信息從析構函數之中傳遞到析構函數之外,就會導致程序終止。請問究竟什么時候異常處理會調用到析構函數?誰來詳細解釋一下?
9 个解决方案
想錯了。。。
其實書上的意思是析構函數里的異常最好在析構函數里解決掉,傳出來就不好了。
你應該懂的,你封裝的類並且寫了一個析構函數,析構函數里的代碼可能有什么除0異常啊,什么異常的,如果你不在析構函數內部直接catch掉而是讓它們繼續往上拋出的話,這就不合理了。
別人拿你的類使用,析構對象的時候不知道你的析構函數還會出現什么除0異常之類的,它只知道可能delete的時候對象本身的內存會出問題(比如你越界訪問內存導致該對象的一部分內存被改動過而導致內存釋放時缺少必要的信息),但它並不知道你的析構函數竟然會拋出什么除0異常,所以你應該讓析構函數自己做好自己份內的事。
析構函數里出現異常,比如說內存寫越界,delete異常,而且析構函數中沒有捕獲異常,這樣異常就會拋出析構函數外
try里delete 就叫異常里析構,白講那么多。