条款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的更多相关文章

  1. 《Effective C++》学习笔记条款13 以对象管理资源

    条款 13 :以对象管理资源 例:      voidf()      {           Investment *pInv = createInvestment();           ... ...

  2. EC读书笔记系列之8:条款13、14、15

    条款13 以对象管理资源 记住: ★为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放 ★两个常被使用的RAII classes分别是tr1::shared_ptr和aut ...

  3. Effective C++_笔记_条款01_视C++为一个语言联邦

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) C++的各种能力和特性使它成为一个无可匹敌的工具,但也可能引发某 ...

  4. Effective Modern C++翻译(5)-条款4:了解如何观察推导出的类型

    条款4:了解如何观察推导出的类型 那些想要知道编译器推导出的类型的人通常分为两种,第一种是实用主义者,他们的动力通常来自于软件产生的问题(例如他们还在调试解决中),他们利用编译器进行寻找,并相信这个能 ...

  5. 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型

    条款4:了解怎样查看推导出的类型 那些想要了解编译器怎样推导出的类型的人通常分为两个阵营. 第一种阵营是实用主义者.他们的动力通常来自于编敲代码过程中(比如他们还在调试解决中),他们利用编译器进行寻找 ...

  6. More Effective C++ 基础议题(条款1-4)总结

    More Effective C++ 基础议题(条款1-4)总结 条款1:仔细区别pointers和references 如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表 ...

  7. 《Effective C++ 》学习笔记——条款11

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  8. Effective C++ ——资源管理

    条款13:以对象来管理资源 在C++中我们经常会涉及到资源的申请与申请,一般都是由关键字new 和 delete来操作的,两者都是成对存在的,缺一不可,否则会出现意想不到的问题,例如: class I ...

  9. Effective C++ —— 资源管理(三)

    条款13 : 以对象管理资源 假设有如下代码: Investment* createInvestment(); //返回指针,指向Investment继承体系内的动态分配对象,调用者有责任删除它 vo ...

随机推荐

  1. (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...

  2. Xshell安装后,使用的优化

    常见的远程连接软件 windows Xshell.secureCRT.Putty mac ssh命令.iterm2 手机 IOS-termius Android-JuiceSSH Xshell的优化 ...

  3. python六十四课——高阶函数练习题(二)

    总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...

  4. chrome-performance页面性能分析使用教程

    运行时性能表现(runtime performance)指的是当你的页面在浏览器运行时的性能表现,而不是在下载页面的时候的表现.这篇指南将会告诉你怎么用Chrome DevTools Performa ...

  5. 【转】让Xcode支持iOS12.0 设备真机测试(不断更新真机支持包)Xcode 真机测试 iOS

    最新支持12.0 (16A366)! 所有真机包都是同一大版本号向下兼容.例如12.0 Beta6的真机包,是可以兼容12.0 Beta2及Beta1的. 12.0 (16A366)正式版可用!所有低 ...

  6. pm2命令,端口查询,mongodb服务启动,nginx服务启动,n模块的使用,搭建nodejs服务器环境,搭建oracledb服务器环境 linux的环境搭建

    pm2命令 pm2 ls //查询pm2 启动的列表 pm2 start app.js //启动文件 pm2 restart app //重启项目 pm2 logs app //监控项目执行日志打印 ...

  7. 005_python中的构造函数和析构函数

    python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...

  8. 三、Oracle 查询+where条件

    一.查询1.distinct:查询去除重复的行,是所有的列都重复才满足条件2.列别名:as或者空格 select name as 姓名 from student3.查询字段可以做数学运算,也可以做字符 ...

  9. 洛谷题解 P1138 【第k小整数】

    蒟蒻发题解了 说明:此题我用的方法为桶排(我翻了翻有人用了桶排只不过很难看出来,可能有些重复的,这个题只是作为一个专门的桶排来讲解吧) (不会算抄袭吧 ‘QWaWQ’) 简单来说(会的人跳过就行): ...

  10. Mac OS 安装Wget

    没有Wget的日子是非常难过的,强大的Mac OS 下安装Wget非常简单 下载一个Wget的源码包,http://www.gnu.org/software/wget/ 安装与配置 1. 首先下载一个 ...