Effective C++读书笔记 资源管理(之一)
来源:互联网 发布:电信运营商网络架构 编辑:程序博客网 时间:2024/06/05 15:41
Effective C++读书笔记
--By Nathan.Yu 2007-11-27--
3资源管理(之一)
常见的资源:文件描述器(file descriptors)、互斥锁(mutex locks)、图形界面中的字型和笔刷、数据库连接、网络sockets。
不论哪一种资源,重要的是,当你不再使用它时,必须将它还给系统。
条款13:以对象管理资源(Use objects to manage resources)
auto_ptr是一个“类指针(pointer-like)对象”,也就是所谓的“智能指针”,其析构函数自动对其所指对象调用delete。
RAII(Resource Acquisition Is Initialization):资源取得即初始化。
<注意>由于auto_ptr被销毁时会自动删除它所指之物,所以别让多个auto_ptr同时指向同一对象。为了预防这个问题,auto_ptrs有一个不寻常的性质:
若通过copy构造函数或copy assignment操作符复制它们,它们会变成null,而复制所得的指针将取得资源的唯一拥有权!
由于这一诡异的复制行为,加上“受auto_ptrs管理的资源必须绝对没有一个以上的auto_ptr同时指向它”,意味着auto_ptr并非管理动态分配资源的神兵利器。
STL容器要求其元素发挥“正常”赋值行为,因此不能用auto_ptr管理它们。
auto_ptr的替代方案是“引用计数型智能指针”(reference-counting smart pointer, RCSP)。
RCSPs提供的行为类似垃圾回收(GC, garbage collection),不同的是RCSPs无法打破环状引用(cycles of reference, 例如两个其实已经没被使用的对象彼此互指,好像还处在“被使用”状态)。
RCSPs举例:tr1::shared_ptr
<注意>auto_ptr和tr1::shared_ptr两者都在析构函数内做delete而不是delete[]动作。意味着两者都不能用在动态分配的数组上。
对数组可用容器如vector等代替。
然,boost::scoped_array和boost::shared_array则提供了上述管理数组的能力。
请记住:
1、 为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源。
2、 两个被使用的RAII classes分别是tr1::shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它(被复制物)指向null。
- Effective C++读书笔记 资源管理(之一)
- 《Effective C++》读书笔记之中资源管理
- <<Effective C++>>读书笔记3: 资源管理
- 《effective C++》读书笔记三——资源管理
- 《Effective C++》读书笔记(四) 资源管理
- Effective C++读书笔记---资源管理
- 【读书笔记】Effective C++—3 资源管理(之1)
- 【读书笔记】Effective C++—3 资源管理(之2)
- 【读书笔记】Effective C++—3 资源管理(之3)
- 【读书笔记】Effective C++—3 资源管理(之4)
- <Effective C++: 资源管理> 笔记
- Effective C++(三)资源管理
- effective C++: 3资源管理
- effective c++-资源管理
- 《Effective C++》资源管理章节
- effective c++:资源管理相关
- Effective C++读书笔记3(资源管理)
- 《Effective Java》读书笔记之一
- wcsf
- asp.net怎么获取服务器基本信息
- Linux 挂载Qcow2硬盘
- ojective学习之二
- C、C++语言,源码中整形数的进制问题
- Effective C++读书笔记 资源管理(之一)
- Access 操作或事件已被禁用模式阻止
- 读取配置文件
- Effective C++读书笔记 之链接
- POJ 2081 Recaman's Sequence 解题报告
- Linux JDK安装
- DB2数据库、DML数据操纵语言、DDL数据定义语言
- access中的update语句有点怪,从一个表更新另外一个表
- 同个staitc变量不同的内存地址 --- 不稳定的singleton模式