C++new失败后如何处理

兩個可能性:new失敗會throwbad_alloc, 或傳回 0.



這兩個可能性會導致兩個結果. 如果new拋 bad_alloc, 所有已經成功建構的物件 (如 base class, 其它成員物件) 都會解構. 尚未建構的物件不會建構. Caaa 物件也不會存在.



如果new傳回 0, 你會有一個完整的物件, 但其內部的成員資料的完整性是個問題 ('total' 不是 0, 但 'ptr' 是 0).



你可以在 initialization list 裡抓成員所拋的 exceptions:



Caaa::Caaa(intnum,intp)

try
: total(num), ptr(newint[num])

{

// 正常運作的 body

}

catch(...)

{

// exception handler

}



既使
catch-block 沒有throw, 當跑到 constructor 的catch*-block 結束時, 原本的 exception 會自動重拋.原文链接: https://www.cnblogs.com/xiangshancuizhu/archive/2011/04/17/2019090.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/24157

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午2:00
下一篇 2023年2月8日 上午2:00

相关推荐