c 建構函式和析構函式中的異常

2021-06-25 10:23:54 字數 506 閱讀 2999

情況一:建構函式中有異常丟擲

建構函式中有異常丟擲,需要注意如果該建構函式中已在堆中生成了物件,要在建構函式中進行異常處理去釋放堆中資源或者使用智慧型指標,因為這時建構函式未執行成功,物件還未建立成功,在棧回退時不會呼叫析構函式,進而造成記憶體洩漏;若在堆中生成的物件則無需擔心,因為在棧回退時會釋放。

測試**如下:

#include using namespace std;

class a

~base()

};int main()

catch (int e)

~base()

};int main()

catch (int e)

{cout <<"get the catch:"<

綜合上面兩個例子,我們應該盡量避免在析構函式丟擲異常,因為這會導致很多錯誤的產生。

注:以上為個人的一些淺顯的理解,如有錯誤之處,還望批評指正。

參考:

建構函式和析構函式中的異常

建構函式和析構函式中的異常 2008 11 29 21 39 建構函式中的異常 在建構函式中丟擲異常將中止物件的構造,這將產生乙個沒有被完整構造的物件。對於c 來說,這種不完整的物件將被視為尚未完成建立動作而不被認可,也意味著其析構函式永遠不會被呼叫。這個行為本身無可非議,就好像公安局不會為乙個被流...

建構函式和析構函式中丟擲異常

不會造成記憶體洩漏 1 new乙個物件有兩個過程 a.向系統申請記憶體空間 b.在申請的記憶體空間上執行建構函式,初始化物件。2 內部物件構造先於物件本身。3 物件在建構函式丟擲異常後,系統會負責清理構造物件時申請的記憶體,但不會呼叫物件析構函式。也就是說構造物件的記憶體會被釋放掉,已經完成例項化的...

C 中建構函式和析構函式丟擲異常問題

一.丟擲異常 1.1 丟擲異常 也稱為拋棄異常 即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為 throw 表示式 如果在try語句塊的程式段中 包括在其中呼叫的函式 發現了異常,且拋棄了該異常,則這個異常就可以被try語句塊後的某個catc...