1、为什么要使用资源管理类?

  资源管理类的思路就是,栈上的对象,封装堆上分配的资源,确保一定会释放资源。auto_ptr和shared_ptr就是资源管理类,行为上像指针。

2、auto_ptr和shared_ptr用来管理,堆上分配的内存,在auto_ptr和shared_ptr的析构方法中,执行delete。对于其他资源,auto_ptr和shared_ptr并不适合作为资源管理类。考虑互斥锁mutex,有普通方法lock和unlock,提供一个资源管理类Lock,管理mutex。资源管理类Lock被复制,将发生什么情况?该怎么办?

  a、禁止复制;

  b、采用引用计数法,也就是shared_ptr,可以共享资源,注意:当引用计数为0的时候,不是delete,而是unlock,提供给shared_ptr一个删除器;

  c、深度复制,复制指针指向的内容;

  d、转移资源的拥有权;

【14】在资源管理类中小心copying行为的更多相关文章

  1. Effective C++(14) 在资源管理类中小心copying行为

    问题聚焦:     上一条款所告诉我们的智能指针,只适合与在堆中的资源,而并非所有资源都是在堆中的.     这时候,我们可能需要建立自己的资源管理类,那么建立自己的资源管理类时,需要注意什么呢?. ...

  2. Effective C++ -----条款14: 在资源管理类中小心copying行为

    复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为. 普遍而常见的RAII class copying行为是:抑制copying(使用私有继承 ...

  3. 条款14:在资源管理类中小心copying行为

    请牢记: 1.复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为. 2.普遍常见的RAII class copying行为是:抑制copyin ...

  4. EC笔记:第三部分:14、在资源管理类中小心Copying行为

    场景 上一节实现了智能指针,其中的拷贝构造函数和赋值运算符是通过增加/减少指针的引用计数来操作的.但是如果是管理一个独占资源呢?我们希望在一个资源使用时被锁定,在使用完毕后被释放. #include ...

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

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

  6. effective条款15,在资源管理类中小心copying行为

    class A { private: int *p; void lock(){ cout << p << "is lock" << endl; ...

  7. Effective C++ 条款13/14 以对象管理资源 || 在资源管理类中小心拷贝行为

    三.资源管理       资源就是一旦你使用了它,将来不用的时候必须归还系统.C++中最常用的资源就是动态内存分配.其实,资源还有 文件描述符.互斥器.图形界面中的字形.画刷.数据库连接.socket ...

  8. 读书笔记 effective c++ Item 15 在资源管理类中提供对原生(raw)资源的访问

    1.为什么需要访问资源管理类中的原生资源  资源管理类是很奇妙的.它们是防止资源泄漏的堡垒,没有资源泄漏发生是设计良好的系统的一个基本特征.在一个完美的世界中,你需要依赖这样的类来同资源进行交互,绝不 ...

  9. Effective C++ 条款15、16 在资源管理类中提供对原始资源的访问||成对使用new 与 delete要采取相同形式

    1.在资源管理类中提供对原始资源的访问     前几个条款很棒,它们是对抗资源泄露的壁垒,但很多APIs直接指向 资源,这个时候,我们需要直接访问原始资源.     这里,有两种方法解决上述问题,我们 ...

随机推荐

  1. 利用ZABBIX的RPC-JSON作API扩展应用示例

    计划将ZABBIX的一些状态可以在另一个应用的显示GRAPH及链接. 故而在网上找了几个文档,作了一个测试. https://www.zabbix.com/documentation/2.4/manu ...

  2. SpringMVC可以配置多个拦截后缀*.html和.do等

    一个servlet可以配置多个servlet-mapping, 因此在xml文件中我们可以这样配置: <!-- springmvc配置 --> <servlet> <se ...

  3. 【洛谷P2927 [USACO08DEC]拼图游戏Jigsaw Puzzles】深搜

    其实,随便搜了一搜就可以AC了!!! - - 亏我纠结了这么久= = #include<cstdio> #include<cstdlib> #include<cstrin ...

  4. Druid数据库连接池两种简单使用方式

    阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部 ...

  5. QT4项目升级到QT5遇到的问题和解决方法

    QT4升级到QT5改动: PC部分: [改QTDIR变量] 在工程根目录下找到.user文件, 如InnoTabPlugin.vcxproj.user 修改指向你的QT5根目录: <Proper ...

  6. ruby 方法重载

    class MyClass def sayHello return "hello from MyClass" end def sayGoodbye return "Goo ...

  7. 一个简单的有向图Java实现

    最近看了点有向图的内容,参考开源项目做了一个简单版本,直接贴代码. /** * 有向图接口,定义需要实现的各个方法,可以选择使用邻接矩阵或者邻接链表来实现 * @param <V> V代表 ...

  8. WCF - Hosting WCF Service

    After creating a WCF service, the next step is to host it so that the client applications can consum ...

  9. Oracle.ManagedDataAccess.Client注意事项

    OracleConnection m_DbConnection = new OracleConnection(connectionString); if (m_DbConnection.State = ...

  10. mybatis 应用参考

    1.例子中包含了 mybatis 的常用sql的写法2.动态sql 的应用3.存储过程的使用 http://takeme.iteye.com/blog/1732801