Effective C++ 学习备忘录八

定制 new 和 delete

  • 条款 49 - 了解 new-handler 的行为
  • set_new_handler 允许用户指定一个函数,在内存分配无法获得满足时调用
  • Nothrow new 是一个颇为局限的工具,因为它只适用于内存分配;后继的构造函数调用还是可能抛出异常。
  • 条款 50 - 了解 new 和 delete 的替换时机
  • 有许多理由需要写个自定义的 new 和 delete,包括改善效能,对 heap 运用错误进行调试以及收集 heap 使用信息等。
  • 条款 51 - 编写 new 和 delete 需固守常规
  • operator new 应该内含一个无穷循环,并在其中尝试分配内存,如果无法满足内存需求,就该调用 new_handler。它也应该有能力处理 0 bytes 申请,Class 专属版本还应该能够处理 “比正确大小更大的(错误)申请”。
  • operator delete 应该在收到 Null 指针时不做任何可,Class 专属版本还应该能够处理 “比正确大小更大的(错误)申请”。
  • 条款 52 - 写了 placement operator new 也要写 placement operator delete
  • 当你编写一个 placement operator new ,请确定也写出对应的 placement operator delete。如果没有这样做你的程序可能会发生隐微或者时断时续的内存泄漏。
  • 当你声明 placement new 和 placement delete,请确定不要无意识地遮掩他们的正常版本。

推荐阅读更多精彩内容