[Effective C++]条款14:在资源管理类中小心copying行为
复制 RAII 对象必须一并复制它所管理的资源
,所以资源的 copying 行为决定 RAII 对象的 copying 行为- 普遍而常见的 RAII class copying 行为是:阻止 copying、使用引用计数(reference counting)。不过其他行为也都可能被实现。
当一个 RAII 对象被复制时,可以选择的行为
禁止复制
。许多时候允许 RAII 对象被复制并不合理。对一个像 Iock 这样的 class 这是有可能的,因为很少能够合理拥有“同步化基础器物”(synchronization primitives)的副本。如果复制动作对 RAII class 并不合理,你便应该禁止之。- 对底层资源祭出“
引用计数法
”(reference- count)。有时候我们希望保有资源,直到它的最后一个使用者(某对象)被销毁。这种情况下复制 RAII 对象时,应该将资源的“被引用数”递增。tr1::shared ptr 便是如此。 - 复制底部资源。可以针对一份资源拥有其任意数量的副本。而需要“资源管理类”的唯一理由是,当你不再需要某个副本时确保它被释放。在此情况下复制资源管理对象,应该同时也复制其所包覆的资源。也就是说,复制资源管理对象时,进行的是“
深拷贝
” 转移底部资源的拥有权
。某些罕见场合下你可能希望确保永远只有一个 RAII 对象指向一个未加工资源(raw resource),即使 RAII 对象被复制依然如此。此时资源的拥有权会从被复制物转移到目标物。
[Effective C++]条款14:在资源管理类中小心copying行为相关推荐
- [Effective C++ --014]在资源管理类中小心copying行为
第一节 <背景> 条款13中讲到"资源取得的时机便是初始化时机"并由此引出"以对象管理资源"的概念.通常情况下使用std中的auto_ptr(智能指 ...
- Effective C++ 条款14
在资源管理器中小心copying行为 上节是对资源的管理说明.有时候我们不能依赖于shared_ptr或者auto_ptr,所以我们须要自己建立一个资源管理类来管理自己的资源. 比如建立一个类来管理M ...
- 第7.14节 Python类中的实例方法详析
第7.14节 Python类中的实例方法详析 一. 实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1. 类体中定义实例方法 第一种方式很简单,就是在类体 ...
- Effective C++ 条款11:在operator=中处理自我赋值
"自我赋值"发生在对象被赋值给自己时: class Widget { ... }; Widget w; ... w = w; // 赋值给自己 a[i] = a[j]; // 潜在 ...
- Effective C++条款13、14
条款十三:以对象管理资源 从这个条款开始,就进入到资源管理部分了.资源管理往往是大型项目的一个难点,也是重中之重,看到一些编程规范,都是将资源管理的规范列为高优先级的重点. 管理资源的最好方法其实是预 ...
- Effective C++条款粗略总结
文章目录 Effective C++ 1.类/结构体 2.资源管理 3.实现 4.模板与泛型编程 5.定制new和delete 6.其他 Effective C++ 1.类/结构体 1.把C++看成一 ...
- Effective C++条款(第三版-侯杰译)
条款一:视C++为一个语言联邦 [C++高效编程守则视情况而变化,取决于你使用的C++哪一部分] 条款二:尽量以const,enum,inline替换#define [对于单纯变量,最好以const对 ...
- 第8.12节 Python类中使用__dict__定义实例变量和方法
上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = ...
- Effective C++条款09:绝不在构造和析构过程中调用virtual函数
Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...
最新文章
- 死磕Synchronized底层实现
- JDBC第一篇之获得数据库连接
- laravel5.6 分页样式目录
- 一篇来自网络的关于“enqueue”events的简短参考(转)
- c++ try catch
- linux刻录光盘空间不足,linux下刻录光盘所发生的问题及解决办法
- 附近的人 php,php 附近的人
- 洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek
- asoc linux设备驱动_Linux驱动分析之I2C设备
- 本人复习总结全部资料及其简历供大家參考
- 搭建Struts2开发环境
- python读取中文txt操作 转化为拼音
- swiper使用笔记-禁止某个div或slide左右切换
- [转载] 晓说——第17期:揭秘战争秘闻 朝鲜战争62年祭(下)
- 超强干货:企业数据防泄密的26种实用方法
- 护士副高需要计算机考试吗,护士评副高什么要求
- DSG-01-3C4-A110-51T油研液压直动式电磁阀
- 安装依赖报错:An unexpected error occurred: “E:\\ReactProject\\umi-project\\package.json:
- r语言C指数的置信区间,用R语言求置信区间
- jquery鼠标移入文字提示_Jquery hover鼠标经过时弹出div动态提示语