c++智能指針使用總結

c++11智能指針

總體原則

  1. std::auto_ptr //不要使用
  2. std::unique_ptr //當需要獨佔資源所有權(訪問權+生命週期控制權)的指針,且不給其他人用時
  3. std::shared_ptr //當需要共享資源所有權(訪問權+生命週期控制權)的指針,其他人可用
  4. std::weak_ptr //只需要訪問權而不需要生命週期控制權時。不能用來直接定義指向原始指針的對象,只能配合std::shared_ptr使用,不能將weak_ptr對象直接賦值給shared_ptr類型的變量。
    通常使用可以一個std::shared_ptr配合n個std::weak_ptr使用,這樣利於資源回收

概念介紹

  1. 獨佔 資源 和共享資源區別 ,直接上例子,請看下面
    std::unique_ptr monster1(new Monster());//monster1 的對象我獨佔了,其他人不要用
      std::unique_ptr monster2 = monster1;//錯誤,編譯期出錯,這是獨佔指針
    std::unique_ptr monster3 = std::move(monster1);//正確,獨佔資源可以轉移所有權給monster3.
      monster1->doSomething();//錯誤(運行時奔潰):因爲monster1的對象已經轉移給monster3獨佔了,自己則指向了nullptr,所以運行時崩潰了

    std::shared_ptr monster1(new Monster());   //計數加到1
      do{
       std::shared_ptr monster2 = monster1;    //計數加到2
      }while(0); //該棧退出後,計數減爲1,monster1指向的堆對象仍存在

std::shared_ptr monster3 = monster1;      //計數加到2
  
3. 生命週期 就是指對象的創建和釋放 的生存時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章