1. 程式人生 > >條款8:別讓異常逃離析構函數

條款8:別讓異常逃離析構函數

eth 調用 發生 異常 如果 銷毀 拋出異常 析構 idg

例如: class Widget { public: ~Widget(){...} }; void doSomething() { vector<Widget>v; } 如果v中有10個Widget,銷毀第一個時發生析構函數拋出異常,銷毀第二個時析構函數又拋出異常,那麽兩個異常同時存在的情況下:程序要麽結束執行要麽導致不明確行為。 因此:析構函數絕對不要吐出異常。如果一個被析構函數調用的函數可能拋出異常,析構函數應該捕捉任何異常,然後吞下它們或結束程序。 如果客戶需要對某個操作函數運行期間拋出的異常作出反應,那麽class應該提供一個普通函數而非在析構函數中執行該操作。 註:STL標準庫的異常我不是很會使用

條款8:別讓異常逃離析構函數