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


    1、为什么需要自定义资源管理类?

    条款13里讲了两种智能指针对象,它们都是用于管理动态内存的。然而,它们并不适用于管理别的资源,比如说互斥器。因此,有些时候我们需要自定义自己的资源管理类。

    2、自定义资源管理类需要考虑的一个问题:copying 问题

    copying包括:copy 构造函数、copy赋值符号函数。在自定义资源管理类时,结合不同的问题(不同场景),处理copying 函数可能采取下述方案

    (1)禁止复制

    有些资源管理对象的copying是不合理的,或者说是没意义的。比如:互斥器。
    禁止复制的具体做法:将copying函数声明为private的。(条款6)

    (2)采用类似于trl::shared_ptr 的引用计数法

    这里的机制类似于trl::shared_ptr ,即直到指向同一对象的最后一个智能指针对象被销毁时前,才释放资源。
    具体做法:内含一个成员变量,当其为0时,进行释放资源。然而不同的资源,释放资源的具体操作可能是不同的。例如,资源是内存的话,就应该是回收内存。而资源是互斥器的话,释放资源就应该是解除锁定。

    trl::shared_ptr智能指针,在缺省参数情况下,便是回收内存。但是,它也可以指定别的释放资源的操作(被称为"删除器"),删除器可以是一个函数,也可以是一个函数对象当需要它时,它可以作为trl::shared_ptr智能指针的第二个参数传递过去。

    (3)复制底部资源

    即,需要做到深拷贝。只要保证副本时,资源被回收即可。

    (4)转移底部资源拥有权

    类似于auto_ptr,即在执行copying操作时,使得等号右边指向null,等号左边指向原本的资源。

  • 相关阅读:
    java基础(初始化和清理)
    jquery的常用操作(转载)+ 开发中经常犯的错误总结(原创) (不断补充)
    java基础常见错误归纳(值传递和引用传递)
    FormPanel 综合使用 忆江南
    MyEclipse下Jquery代码自动提示 忆江南
    HQL查询 忆江南
    MD5密码保护 忆江南
    FormPanel数据提交 忆江南
    新手上路
    编码总结,以及对BOM的理解
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764182.html
Copyright © 2020-2023  润新知