effective(3)
13 以对象管理资源
- Resource Acquisition Is Initialization(RAII)
- 为了防止资源泄露,使用RAII对象,他们在构造函数中获取资源并在析构函数中释放资源
- 两个最常使用的RAII classed分别是tr1::shared_ptr和auto_ptr。前者通常是最佳选择,因为其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对象存储于(置入)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源管理。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kawhicurry's Blog!
评论