中国领先的工业平台

返回贤集网 返回微头条
贤集网技术微头条APP获取

C++箴言:资源管理类的拷贝行为

 山东大明消毒科技有限公司

下载贤集网APP入驻自媒体

并非所有的资源都是基于堆的,然而,对于这样的资源,像 auto_ptr 和 tr1::shared_ptr 这样的智能指针通常就不像 resource handlers(资源管理者)那样合适。在这种情况下,有时,你可能要根据你自己的需要去创建你自己的资源管理类。


  例如,假设你使用 C API 提供的 lock 和 unlock 函数去操纵 Mutex 类型的互斥体对象:




  void lock(Mutex *pm); // lock mutex pointed to by pm




  void unlock(Mutex *pm); // unlock the mutex


  为了确保你从不会忘记解锁一个被你加了锁的 Mutex,你希望创建一个类来管理锁。RAII 原则规定了这样一个类的基本结构,通过构造函数获取资源并通过析构函数释放它:




  class Lock {


   public:


    explicit Lock(Mutex *pm)


    : mutexPtr(pm)


    { lock(mutexPtr); } // acquire resource




    ~Lock() { unlock(mutexPtr); } // release resource




   private:


    Mutex *mutexPtr;


  };


  客户按照 RAII 风格的惯例来使用 Lock:




  Mutex m; // define the mutex you need to use


  ...


  { // create block to define critical section


   Lock ml(&m); // lock the mutex


   ... // perform critical section operations




  } // automatically unlock mutex at end


  // of block


  这没什么问题,但是如果一个 Lock 对象被拷贝应该发生什么?

最新回复

还没有人回复哦,抢沙发吧~

发布回复

为您推荐

热门交流