《Effective C++》资源管理:条款13-条款17
条款13:以对象管理资源
- 为了防止资源泄漏,请使用RAII(Resource Acquisition Is Initialization)对象,在构造函数里面获得资源,在析构函数里面释放资源
- auto_ptr,shared_ptr,unique_lock都是RAII类。
- 一个对象只能由单一auto_ptr指向,不可让多个auto_ptr同时指向同一对象。
- 通过copy构造函数或者copy assignment操作符赋值auto_ptr,被复制的auto_ptr会变成null,复制所得的auto_ptr会获得资源的唯一使用权。
- STL容器不得使用auto_ptr作为模板类型。
条款14:在资源管理类中小心coping行为
- 常见的RAII对象copy行为
- 禁止copy
- 引用计数
- 深度复制
- 转移资源拥有权
条款15:在资源管理类中提供对原始资源的访问
- APIs 往往要求访问原始资源,所以RAII class 应该提供一个获取其所管理资源的接口(如shared_ptr的get()函数)。
- 可通过显示和隐式接口对原始资源的访问,显示比较安全,隐式方便客户。
//隐式转换
class raiiclass {
public:
...
operate raiiclass() const {return res;}
...
private:
rawres res;
}
条款16:成对使用new和delete时要采取相同形式
- new中使用[],必须在相应的delete中使用[]
- nem中未使用[],delete中也不可以使用[]
条款17:以独立语句将newed对象置入智能指针
以独立语句将newed对象存储于智能指针内,防止“资源被创建(new过程)”和“资源被转化为管理对象”两个时间点可能发生异常干扰。
process(new Widget, priority);
//独立语句将newd对象存入智能指针
shard_ptr<Widget> p(new Widget);
process(p, priority);
《Effective C++》资源管理:条款13-条款17的更多相关文章
- 《Effective C++》学习笔记条款13 以对象管理资源
条款 13 :以对象管理资源 例: voidf() { Investment *pInv = createInvestment(); ... ...
- EC读书笔记系列之8:条款13、14、15
条款13 以对象管理资源 记住: ★为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放 ★两个常被使用的RAII classes分别是tr1::shared_ptr和aut ...
- Effective C++_笔记_条款01_视C++为一个语言联邦
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) C++的各种能力和特性使它成为一个无可匹敌的工具,但也可能引发某 ...
- Effective Modern C++翻译(5)-条款4:了解如何观察推导出的类型
条款4:了解如何观察推导出的类型 那些想要知道编译器推导出的类型的人通常分为两种,第一种是实用主义者,他们的动力通常来自于软件产生的问题(例如他们还在调试解决中),他们利用编译器进行寻找,并相信这个能 ...
- 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
条款4:了解怎样查看推导出的类型 那些想要了解编译器怎样推导出的类型的人通常分为两个阵营. 第一种阵营是实用主义者.他们的动力通常来自于编敲代码过程中(比如他们还在调试解决中),他们利用编译器进行寻找 ...
- More Effective C++ 基础议题(条款1-4)总结
More Effective C++ 基础议题(条款1-4)总结 条款1:仔细区别pointers和references 如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表 ...
- 《Effective C++ 》学习笔记——条款11
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- Effective C++ ——资源管理
条款13:以对象来管理资源 在C++中我们经常会涉及到资源的申请与申请,一般都是由关键字new 和 delete来操作的,两者都是成对存在的,缺一不可,否则会出现意想不到的问题,例如: class I ...
- Effective C++ —— 资源管理(三)
条款13 : 以对象管理资源 假设有如下代码: Investment* createInvestment(); //返回指针,指向Investment继承体系内的动态分配对象,调用者有责任删除它 vo ...
随机推荐
- 设计模式のCompositePattern(组合模式)----结构模式
一.产生背景 又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 这种模 ...
- python学习初始函数
函数的用途:解决代码的冗余.可读性差.可扩展性差. 函数的一般格式: #函数定义 def mylen(): """计算s1的长度""" s1 ...
- Harbor是什么
第一次听到这个名字应该是2016年初的时候,那是在容器技术已经兴起的,各个容器管理平台正处于群雄逐鹿的时候,mesos.kubernetes.swarm等被国内外各个厂商用来作为容器的管理系统.这个时 ...
- 12 python 初学(深浅拷贝、集合)
深浅拷贝:参考:http://www.cnblogs.com/yuanchenqi/articles/5782764.html s = [[1, 2], 'lily', 'hello'] s2 = s ...
- mysql之grant权限说明
mysql中给一个用户授权如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,格式为: 给没有用户授权 grant 权限 on 数据库对象 to ...
- mysql 监控工具(windows版本)
文章转自 https://www.cnblogs.com/wucj/p/7152020.html 工具下载 http://www.profilesql.com/download/
- 利用世界杯,读懂 Python 装饰器
Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic. 今天就结合最近的世界杯带大家理解下装饰器. 德 ...
- Unity热更新学习(二) —— ToLua c#与lua的相互调用
tolua 下载地址:http://www.ulua.org/index.html c#调用lua的方法,tolua的官方例子提供了很多种.我初步学了一种在做项目使用的方法.通过DoFile方法执行l ...
- Python 学习 第十三篇:数据的读写-文件、DataFrame、json
Python的文件是一个重要的对象,使用open()函数来打开文件,创建文件对象,进行文件的读写操作.当数据用于交换信息时,通常需要把数据保存为有格式的文本数据,可以保存为有特定的行分隔符和列分隔符的 ...
- Python中for循环搭配else的陷阱
假设有如下代码: for i in range(10): if i == 5: print 'found it! i = %s' % i else: print 'not found it ...' ...