C++new失败后如何处理
时间:2011-04-17 来源:hailong
兩個可能性: new 失敗會 throw bad_alloc, 或傳回 0.
這兩個可能性會導致兩個結果. 如果 new 拋 bad_alloc, 所有已經成功建構的物件 (如 base class, 其它成員物件) 都會解構. 尚未建構的物件不會建構. Caaa 物件也不會存在.
如果 new 傳回 0, 你會有一個完整的物件, 但其內部的成員資料的完整性是個問題 ('total' 不是 0, 但 'ptr' 是 0).
你可以在 initialization list 裡抓成員所拋的 exceptions:
Caaa::Caaa(int num, int *p)
try : total(num), ptr(new int[num])
{
// 正常運作的 body
}
catch (...)
{
// exception handler
}
既使 catch-block 沒有 throw, 當跑到 constructor 的 catch-block 結束時, 原本的 exception 會自動重拋.
相关阅读 更多 +