More_Effective_C++_筆記_103

異常(exception)

條款09

利用 destructors 避免泄漏資源

即避免裸指針的使用, 將指針包裝進對象里面, 即使用智能指針.

條款10

在 constructors 內阻止資源泄漏

請銘記: 對于"僅部分構造完成"的對象, C++ 拒絕調用其 destructor;
請以智能指針替代原始指針成員;

條款11

禁止異常流出 destructors 之外

這里要考慮到棧展開(stack-unwinding)機制, 即一個函數(shù)拋出異常后, 首先在尋找本身的catch字句, 若不能處理, 就會退出當前函數(shù)(釋放函數(shù)內存, 銷毀局部對象, 但不處理 new 出的對象), 尋找上層的異常處理代碼, 直到找到 catch 字句. 若沒有找到, 就會調用 terminate 結束程序, 終端輸出類似下面的信息:

terminate called after throwing an instance of 'int'

所以. 共有兩種情況會調用 destructor, 1. 對象離開生存空間, 正常析構. 2. 棧展開過程中調用. 對于情況2, 應在 destructor 中捕捉任何異常, 但 catch 字塊為空, 阻止了異常流出 destructor, terminate 也不會被調用.

條款12

了解"拋出一個異常"與"傳遞一個參數(shù)"或"調用一個虛函數(shù)"之間的差異

條款13

條款14

條款15

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容