c++别让异常逃离析构函数
生活随笔
收集整理的這篇文章主要介紹了
c++别让异常逃离析构函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++并不禁止析構函數吐出異常,但是并不鼓勵這樣做
- 1)原因
- 2)如何解決
1)原因
如果析構函數吐出異常,程序可能過早結束(比如某個函數調用發生異常,在回溯尋找catch過程中,每離開一個函數,這個函數內的局部對象會被析構,如果此時析構函數又拋出異常,前一個異常還沒得到處理又來一個,因此一般會引起程序過早結束)。異常從析構函數中傳播出去,可能會導致不明確的行為
知乎相關描述
2)如何解決
1.在析構函數中catch異常,然后調用abort終止程序。通過abort搶先置“不明確行為”于死地
2.在析構函數中catch異常,然后記錄該失敗,即吞掉異常(通常是個壞主意,因為這樣壓制了“某些動作失敗”的重要信息。但是也比負擔“草率結束程序”或”不明確行為帶來的風險“好)
3.重新設計接口,讓客戶能夠在析構前主動調用可能引起異常的函數,然后析構函數中使用一個bool變量,根據用戶是否主動調用來決定析構函數中是否應該調用可能引起異常的函數,讓客戶擁有主動權(如果客戶沒有主動調用,那么當發生異常時也不應該抱怨,因為已經給出了客戶自己處理異常的機會)
總結
以上是生活随笔為你收集整理的c++别让异常逃离析构函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 年底离职用什么来留住我的员工 方法很多以
- 下一篇: C++确定对象被使用前已先被初始化