Boolan(博覽網(wǎng))——C++面向?qū)ο蟾呒壘幊蹋ㄏ拢ǖ谖逯茏鳂I(yè)結(jié)論)

1. 構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用過程

  • 創(chuàng)建子類時,先調(diào)用父類的構(gòu)造函數(shù),再調(diào)用子類的構(gòu)造函數(shù)。(構(gòu)造由內(nèi)而外
  • 銷毀子類時,先調(diào)用子類的析構(gòu)函數(shù),再調(diào)用父類的析構(gòu)函數(shù)。(析構(gòu)由外而內(nèi)

2. Apple 中重載一般的 operator new 和 operator delete (無異常)

  • 在堆區(qū)創(chuàng)建對象時,先調(diào)用重載的 new ,然后再分別調(diào)用父類和子類的構(gòu)造函數(shù)。
  • 在堆區(qū)銷毀對象時,先分別調(diào)用子類和父類的析構(gòu)函數(shù),然后再調(diào)用重載的 delete

3. Apple 中重載一般的 operator new 和 operator delete (構(gòu)造有異常)

當(dāng)創(chuàng)建對象產(chǎn)生異常時,會對對象調(diào)用 delete 。其中銷毀對象時,只調(diào)用了父類的析構(gòu)函數(shù),然后調(diào)用 operator delete 來釋放申請的內(nèi)存。異常對象在異常處理完成后再被銷毀。

4. Apple類中 placement new 調(diào)用的 ctor 有異常

當(dāng) placement new 所調(diào)用的 ctor 拋出異常,會調(diào)用相對應(yīng)的 operator (placement) delete 來處理異常,其用途是釋放與之對應(yīng)的 placement new 分配所得的內(nèi)存。

5. Apple類中 placement new 調(diào)用的 ctor 無異常

當(dāng) placement new 所調(diào)用的 ctor 無異常,會調(diào)用operator delete(void* ptr) 來處理異常。

6. Apple類中 placement new 調(diào)用的 ctor 有異常(無對應(yīng) delete )

當(dāng) placement new 所調(diào)用的 ctor 拋出異常,而沒有與之對應(yīng)的 operator (placement) delete 來處理異常,則默認不進行異常處理。因此保險起見,placement new 和 placement delete 必須要成對出現(xiàn),否則就會產(chǎn)生內(nèi)存泄漏。

程序運行結(jié)果:

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容