<Effective C++: 资源管理> 笔记
2012-05-31 17:30
375 查看
条款13:为防止资源泄漏,请使用RAII对象,它们在构造函数中,获得资源并在析构函数中释放资源。
两个常被使用的RAII对象分别是shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它指向null。
条款14:在资源管理类中,小心copying行为。
复制RSII对象必须一并复制他所管理的资源,所以资源的copying行为决定RAII对象的copying行为。
普遍而常见RAII class copying行为是:抑制copying,引用计数法(类似shared_ptr),深度复制,转移资源拥有权(类似auto_ptr)。
另外,shared_ptr还可以指定所谓的“删除器”,比如在引用计数为0时,不是删除指针,而是解除锁定。
条款15:在资源管理类中,提供对原始资源的访问。
这是因为,有些API函数需要直接处理资源(指针),比如shared_ptr提供了get()方法,用以返回其保存的资源。
APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理资源”的方法。
对原始资源的访问可能经由显式转换或隐式转换。一般而言,显式转换比较安全,但隐式转换对客户比较方便。
条款16:成对使用new和delete时,要采用相同形式。
比如,new对应delete,new []对应delete []。
对于数组类型,一般不要使用typedef。
同样的道理,在C语言中,多级指针的使用时,用了多少次malloc,就要用多少次free。
条款17:以独立语句将newed对象置入智能指针。
C++对于函数参数的执行次数没有定义,所以呢,在调用函数的时候,在参数上使用new构造函数,一旦发生异常,可能会导致内存泄露。最好,在单独的语句中new出对象,再放入参数中。
两个常被使用的RAII对象分别是shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它指向null。
条款14:在资源管理类中,小心copying行为。
复制RSII对象必须一并复制他所管理的资源,所以资源的copying行为决定RAII对象的copying行为。
普遍而常见RAII class copying行为是:抑制copying,引用计数法(类似shared_ptr),深度复制,转移资源拥有权(类似auto_ptr)。
另外,shared_ptr还可以指定所谓的“删除器”,比如在引用计数为0时,不是删除指针,而是解除锁定。
条款15:在资源管理类中,提供对原始资源的访问。
这是因为,有些API函数需要直接处理资源(指针),比如shared_ptr提供了get()方法,用以返回其保存的资源。
APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理资源”的方法。
对原始资源的访问可能经由显式转换或隐式转换。一般而言,显式转换比较安全,但隐式转换对客户比较方便。
条款16:成对使用new和delete时,要采用相同形式。
比如,new对应delete,new []对应delete []。
对于数组类型,一般不要使用typedef。
同样的道理,在C语言中,多级指针的使用时,用了多少次malloc,就要用多少次free。
条款17:以独立语句将newed对象置入智能指针。
C++对于函数参数的执行次数没有定义,所以呢,在调用函数的时候,在参数上使用new构造函数,一旦发生异常,可能会导致内存泄露。最好,在单独的语句中new出对象,再放入参数中。
相关文章推荐
- <Effective C++: 习惯C++> 笔记
- &lt;More Effective C++&gt;笔记--其他杂项
- <<一分钟经理人>> 读后笔记
- <<Python基础教程>>学习笔记 | 第11章 | 文件和素材
- <项目开发>简单的题库管理系统
- <C#入门经典>学习笔记1之初识C#
- <<高级Bash脚本编程>> 学习笔记
- <android 笔记>通知栏学习2
- &lt;More Effective C++&gt;笔记--技巧
- <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持
- Java笔记7 Java基础加强<1>反射
- 条款2:尽量用<iostream>而不用<stdio.h> [effective C++ 学习笔记]
- <<C语言深度剖析>>学习笔记之三:符号
- &lt;More Effective C++&gt;笔记--异常
- <仅是自己做笔记。。。系列-2>求二叉树中节点的最大距离
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- Java_web初学笔记之<MyEclipse自动提示设置 空格和等号不补全>
- <ORACLE 数据库管理指导> 其中不乏错误认识 读者请帮忙指正
- Java笔记7 Java基础加强<2>内省
- <四>基于淘宝Fourinone实现集群管理demo