zoukankan      html  css  js  c++  java
  • C++new失败后如何处理

    兩個可能性: 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 會自動重拋.
  • 相关阅读:
    Java Socket
    路由器和交换机的区别
    OSI七层协议
    traceroute命令
    DNS递归和迭代原理
    出栈入栈顺序问题
    A记录、CNAME记录、MX记录
    DNS解析原理
    RAID磁盘阵列0、1、5、10
    http状态码
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2019090.html
Copyright © 2011-2022 走看看