• 复制 RAII 对象必须一并复制它所管理的资源,所以资源的 copying 行为决定 RAII 对象的 copying 行为
  • 普遍而常见的 RAII class copying 行为是:阻止 copying、使用引用计数(reference counting)。不过其他行为也都可能被实现。

当一个 RAII 对象被复制时,可以选择的行为

  1. 禁止复制。许多时候允许 RAII 对象被复制并不合理。对一个像 Iock 这样的 class 这是有可能的,因为很少能够合理拥有“同步化基础器物”(synchronization primitives)的副本。如果复制动作对 RAII class 并不合理,你便应该禁止之。
  2. 对底层资源祭出“引用计数法”(reference- count)。有时候我们希望保有资源,直到它的最后一个使用者(某对象)被销毁。这种情况下复制 RAII 对象时,应该将资源的“被引用数”递增。tr1::shared ptr 便是如此。
  3. 复制底部资源。可以针对一份资源拥有其任意数量的副本。而需要“资源管理类”的唯一理由是,当你不再需要某个副本时确保它被释放。在此情况下复制资源管理对象,应该同时也复制其所包覆的资源。也就是说,复制资源管理对象时,进行的是“深拷贝
  4. 转移底部资源的拥有权。某些罕见场合下你可能希望确保永远只有一个 RAII 对象指向一个未加工资源(raw resource),即使 RAII 对象被复制依然如此。此时资源的拥有权会从被复制物转移到目标物。

[Effective C++]条款14:在资源管理类中小心copying行为相关推荐

  1. [Effective C++ --014]在资源管理类中小心copying行为

    第一节 <背景> 条款13中讲到"资源取得的时机便是初始化时机"并由此引出"以对象管理资源"的概念.通常情况下使用std中的auto_ptr(智能指 ...

  2. Effective C++ 条款14

    在资源管理器中小心copying行为 上节是对资源的管理说明.有时候我们不能依赖于shared_ptr或者auto_ptr,所以我们须要自己建立一个资源管理类来管理自己的资源. 比如建立一个类来管理M ...

  3. 第7.14节 Python类中的实例方法详析

    第7.14节 Python类中的实例方法详析 一.    实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1.    类体中定义实例方法 第一种方式很简单,就是在类体 ...

  4. Effective C++ 条款11:在operator=中处理自我赋值

    "自我赋值"发生在对象被赋值给自己时: class Widget { ... }; Widget w; ... w = w; // 赋值给自己 a[i] = a[j]; // 潜在 ...

  5. Effective C++条款13、14

    条款十三:以对象管理资源 从这个条款开始,就进入到资源管理部分了.资源管理往往是大型项目的一个难点,也是重中之重,看到一些编程规范,都是将资源管理的规范列为高优先级的重点. 管理资源的最好方法其实是预 ...

  6. Effective C++条款粗略总结

    文章目录 Effective C++ 1.类/结构体 2.资源管理 3.实现 4.模板与泛型编程 5.定制new和delete 6.其他 Effective C++ 1.类/结构体 1.把C++看成一 ...

  7. Effective C++条款(第三版-侯杰译)

    条款一:视C++为一个语言联邦 [C++高效编程守则视情况而变化,取决于你使用的C++哪一部分] 条款二:尽量以const,enum,inline替换#define [对于单纯变量,最好以const对 ...

  8. 第8.12节 Python类中使用__dict__定义实例变量和方法

    上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = ...

  9. Effective C++条款09:绝不在构造和析构过程中调用virtual函数

    Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...

最新文章

  1. 死磕Synchronized底层实现
  2. JDBC第一篇之获得数据库连接
  3. laravel5.6 分页样式目录
  4. 一篇来自网络的关于“enqueue”events的简短参考(转)
  5. c++ try catch
  6. linux刻录光盘空间不足,linux下刻录光盘所发生的问题及解决办法
  7. 附近的人 php,php 附近的人
  8. 洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek
  9. asoc linux设备驱动_Linux驱动分析之I2C设备
  10. 本人复习总结全部资料及其简历供大家參考
  11. 搭建Struts2开发环境
  12. python读取中文txt操作 转化为拼音
  13. swiper使用笔记-禁止某个div或slide左右切换
  14. [转载] 晓说——第17期:揭秘战争秘闻 朝鲜战争62年祭(下)
  15. 超强干货:企业数据防泄密的26种实用方法
  16. 护士副高需要计算机考试吗,护士评副高什么要求
  17. DSG-01-3C4-A110-51T油研液压直动式电磁阀
  18. 安装依赖报错:An unexpected error occurred: “E:\\ReactProject\\umi-project\\package.json:
  19. r语言C指数的置信区间,用R语言求置信区间
  20. jquery鼠标移入文字提示_Jquery hover鼠标经过时弹出div动态提示语

热门文章

  1. springboot游戏推荐平台 j计算机专业毕业设计源码17128
  2. linux中通过date命令获取昨天或明天时间的方法
  3. java ofbiz_Ofbiz初探
  4. amr-wb,转自刘品
  5. C语言--使用循环语句设计简易计算器
  6. win/mac/linux谷歌浏览器与driver对应版本下载
  7. 成绩分级——switch
  8. docker数据迁移
  9. 解说Java Stream
  10. 大数据Spark Structured Streaming