东阳的学习笔记
条款13:以对象管理资源
- 记住 delete 并不能确保执行,但析构函数一定会被执行
- 将资源放入管理对象中同一管理,使用析构函数确保对象被删除
- auto_ptr 和 引用计数智能指针
- 某些特殊场合需要设计自己的资源管理类。
条款14:在资源管理类中小心 copying 行为
- RAII: 在构造函数中获取资源,并在析构函数中释放资源
- 当一个RAII对象被复制的时候,有以下几种策略:
i. 禁止复制
ii. 对底层资源使用 “引用计数法”
iii. 进行深度拷贝
iv. 转移底部资源的拥有权
记住:
- 复制RAII对象必须一并复制它所管理的资源
- 普遍而常见的 RAII class copying 行为是:抑制 copying, 采用引用计数
条款15:在资源管理类中提供对原始资源的访问
记住:
- APIs往往要求访问原始数据,所以每一个 RAII class 应该提供一个 “取得其所管理之资源” 的方法
- 隐式转换和显式转换,显示转化更加安全,但是隐式转化对客户来说更加方便
条款16:成对使用 new / delete 时要采取相同形式
- delete需要知道自己要调用多少个析构函数
- 为了不产生歧义,最好不要对数组形式做 typedef 动作。
条款17:以独立语句将 newed 对象置入智能指针
- 如果不这么做,一旦异常被抛出,有可能导致难以察觉的资源泄漏