<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      C++箴言:資源管理類的拷貝行為

      [摘要]在上一篇文章中介紹了作為資源管理類支柱的 Resource Acquisition Is Initialization (RAII) 原則,并描述了 auto_ptr 和 tr1::shared_ptr 在基于堆的資源上運用這一原則的表現。并非所有的資源都是基于堆的,然而,對于這樣的資源,像 au...
      在上一篇文章中介紹了作為資源管理類支柱的 Resource Acquisition Is Initialization (RAII) 原則,并描述了 auto_ptr 和 tr1::shared_ptr 在基于堆的資源上運用這一原則的表現。并非所有的資源都是基于堆的,然而,對于這樣的資源,像 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 對象被拷貝應該發生什么? 


      日韩精品一区二区三区高清