《Effective C++第三版》读书笔记——资源管理
来源:互联网 发布:js控制视频播放 编辑:程序博客网 时间:2024/06/07 18:35
3 资源管理
~~~~~~~~~~~
3.1 以对象管理资源
===================
1. 标准程序库提供的auto_ptr,其析构函数自动对所指对象调用delete.
- auto_ptr<T> pT(new T());
2. 由于auto_ptr会自动删除所指之物,故一定别让多个auto_ptr指向同一对象,否则对象被删除多次的后果是未定义的.
为了防止这个问题,auto_ptr有一个不同寻常的性质:若通过copy构造函数或copy assignment操作符复制它们,它们会变成null,而复制所得的指针将取得资源的唯一拥有权.
由于STL容器要求元素发挥正常的复制行为,因此这些容器不能存auto_ptr
auto_ptr的替代方案是引用计数型智慧指针(reference-counting smart pointer RCSP)
例如TR1的tr1:shared_ptr
3. auto_ptr和tr1::shared_ptr的析构函数内做的是delete而不是delete[]动作,故不能在动态分配的数组上使用auto_ptr和tr1::shared_ptr,不过数组基本上可以被vector所取代
4. 以对象管理资源的两个关键想法是
* 获得资源后立刻放入管理对象中
* 管理对象运用析构函数确保资源被释放
3.2 在资源管理类中提供对原始资源的访问
=======================================
1. tr1::shared_ptr和auto_ptr都提供一个get成员函数,会返回智能指针内部的原始指针.
2. 可以通过显式提供get方法返回原始指针,
也可以提供隐式转换函数的方法转型为原始指针
- class ResourceHandler{
- public:
- operator Resource() const
- {return res;{
- private:
- Resource res;
- }
但是这个隐式转换函数可能会使客户在需要使用ResourceHandler的地方错误地转换成为Resource
3.3 以独立语句将newd对象置入智能指针
=====================================
1. 当构造函数是个explicit构造函数,无法进行隐式转换
2. 像Func(ResourceHandler(new Resource),otherHandler)这样的语句,有可能获得的操作序列为new Resource,otherHandler,ResourceHandler(),
由于在资源被创建(new Resource)和资源被转换为资源管理对象(ResourceHandler())之间的otherHandler可能发生异常干扰故而可能发生资源泄露.
解决的办法就是分离语句,分别写出1.创建新资源并放入智能指针中(rh=ResourceHandler(new Resource)),2.将智能指针传入函数内(Func(rh,otherHandler)).
本文出自 “暗日” 博客,请务必保留此出处http://darksun.blog.51cto.com/3874064/1144746
- 《Effective C++第三版》读书笔记——资源管理
- 《effective C++》读书笔记三——资源管理
- 【读书笔记】Effective C++—3 资源管理(之1)
- 【读书笔记】Effective C++—3 资源管理(之2)
- 【读书笔记】Effective C++—3 资源管理(之3)
- 【读书笔记】Effective C++—3 资源管理(之4)
- 《Effective C++》读书笔记之中资源管理
- <<Effective C++>>读书笔记3: 资源管理
- Effective C++——资源管理
- 《Effective C++》第三章:资源管理
- 《Effective C++(第三版)》读书笔记
- Effective C++读书笔记 第三部分 资源管理
- 《Effective C#》读书笔记——了解.NET内存管理机制<.NET资源管理>
- 《Effective C++》读书笔记(四) 资源管理
- Effective C++(第三版)读书笔记
- Effective C++ — 资源管理
- Effective C++读书笔记---资源管理
- effective C++(第三版)读书笔记一——条款一:视C++为一个语言联邦
- Emacs学习笔记
- GNU make笔记
- 什么样的类可以作为map的键值
- 《Effective C++第三版》读书笔记——让自己习惯C++
- 《Effective C++第三版》读书笔记——构造/析构/赋值运算
- 《Effective C++第三版》读书笔记——资源管理
- 《Effective C++第三版》读书笔记——设计与声明
- 自我实现简易的智能指针
- 《Effective C++第三版》读书笔记——实现
- 14443协议的一些小的问题集锦
- 《Effective C++第三版》读书笔记——设计与面向对象设计
- 《Effective C++第三版》读书笔记——定制new和delete
- <Effective STL>笔记--容器
- <Effective STL>笔记--vector和string