Effective C++ 学习备忘录三

资源管理

  • 条款 13 - 以对象管理资源
  • 为了防止资源泄漏,请使用 RAII 对象,它们在构造函数中获取资源,在析构函数中释放资源。
  • 两个常用的 RAII classes 分别是 tr1::shared_ptr 和 auto_ptr (c++98),前者通常是较佳选择,因为其 Copy 行为比较直观。若选择 auto_ptr ,复制动作会使得被复制物指向 null。
  • 条款 14 - 在资源管理类中小心 copying 行为
  • 复制 RAII 对象必须一并复制其所管理的所有资源,所以资源 copying 行为决定 RAII 对象的 copying 行为。
  • 普遍而常见的 RAII class copying 行为是:抑制 copying ,施行引用计数法。不过其他行为也可能被实现。
  • 条款 15 - 在资源管理类中提供对原始资源的访问
  • APIs 往往要求访问原始资源,所以每一个 RAII class 应该提供一个 “取得其所管理之资源” 的办法。
  • 对原始资源的访问可能经由显式转换或者隐式转换。一般而言显式转换比较安全,但隐式转换对客户比较方便。
  • 条款 16 - 成对使用 new 和 delete 要采用相同形式
  • 如果你在 new 表达式中使用了 [],那么你在 delete 表达式中也要使用 [],如果你在 new 表达式中没有使用 [],那么你在 delete 表达式中也不要使用 []。
  • 条款 17 - 以独立语句将 newed 的对象置入智能指针中
  • 以独立语句将 newed 对象置入智能指针中,如果不这样做,一旦异常抛出,有可能导致难以察觉的资源泄漏。

推荐阅读更多精彩内容