zoukankan      html  css  js  c++  java
  • effective c++ 条款14 在资源管理类中小心copying行为

    先说一个重要的概念是RAII(Resource Acquisition is Initialization) 即 资源在获得时进行初始化。

    并不是所有的资源都是head-based,换句话说并不是tr1::shared_ptr 和 auto_ptr 永远适合做为资源的管理者,所以我们自己要建立自己的资源管理类。

    例如我们使用c API函数处理类型为Mutex的互斥器对象

    void lock(Mutex *pm);
    void unlock(Mutex *pm);
    
    class Lock{
    
    public:
    
    explicit Lock(Mutex* pm):mptr(pm)
        {
        
        }
        ~Lock()                   //资源在构造时进行初始化,析构时进行解锁。
        {
            unlock(mptr);
        }
    private:
        Mutex *mptr;
    
    }

    当我们Lock对象进行copy时会发生什么,如下:

    Mutex m;
    Lock m11(&m);
    Lock m12(m11);  //进行copy行为

    当然这种行为并不是我们愿意看到的得,但有时我们又不能完全避免的。

    一般我们采取下面四种措施:

    1.禁止进行copy行为。

    2.对底层资源采取"引用计数法"。

    3.复制底层资源

    4.转移底层资源的拥有权。

  • 相关阅读:
    mysql 版本查看
    js 中文乱码
    浏览器内核
    Squid 代理服务器
    minicygwin
    firefox 插件开发
    ocx c++
    NetBeans
    android 虚拟机
    ExpandableListView
  • 原文地址:https://www.cnblogs.com/onlycxue/p/3091838.html
Copyright © 2011-2022 走看看