C 智慧型指標 shared ptr

2021-08-20 16:24:05 字數 1049 閱讀 3670

shared_ptr 是乙個標準的共享所有權的智慧型指標, 允許多個指標指向同乙個物件. 定義在 memory 檔案中(非memory.h), 命名空間為 std.

shared_ptr 是為了解決 auto_ptr 在物件所有權上的侷限性(auto_ptr 是獨佔的), 在使用引用計數的機制上提供了可以共享所有權的智慧型指標, 當然這需要額外的開銷:

(1) shared_ptr 物件除了包括乙個所擁有物件的指標外, 還必須包括乙個引用計數**物件的指標.

(2) 時間上的開銷主要在初始化和拷貝操作上, *和->操作符過載的開銷跟auto_ptr是一樣.

(3) 開銷並不是我們不使用shared_ptr的理由, 永遠不要進行不成熟的優化, 直到效能分析器告訴你這一點.

使用方法:

可以使用模板函式 make_shared 建立物件, make_shared 需指定型別('<>'中)及引數('()'內), 傳遞的引數必須與指定的型別的建構函式匹配. 如:

std::shared_ptrsp1 = std::make_shared(10);

std::shared_ptrsp2 = std::make_shared("hello c++");

也可以定義 auto 型別的變數來儲存 make_shared 的結果.

auto sp3 = std::make_shared(11);

printf("sp3=%d\n", *sp3);

auto sp4 = std::make_shared("c++11");

printf("sp4=%s\n", (*sp4).c_str());

use_count 返回引用計數的個數

unique 返回是否是獨佔所有權( use_count 為 1)

swap 交換兩個 shared_ptr 物件(即交換所擁有的物件)

reset 放棄內部物件的所有權或擁有物件的變更, 會引起原有物件的引用計數的減少

get 返回內部物件(指標), 由於已經過載了()方法, 因此和直接使用物件是一樣的.如 shared_ptrsp(new int(1)); sp 與 sp.get()是等價的

c 智慧型指標 shared ptr

為了更容易更方便的使用動態記憶體,c 提供了兩種智慧型指標shared ptr和unique ptr來管理動態物件,智慧型指標負責自動釋放所管理的物件,避免因為不合適的釋放導致的記憶體洩露和訪問已釋放記憶體的bug 智慧型指標也是模板,建立乙個智慧型指標時,必須提供額外的型別資訊,如shared p...

shared ptr智慧型指標

智慧型指標是乙個行為類似指標的物件。我們在使用堆記憶體時,都需要及時地進行釋放,避免造成記憶體洩漏。但我們偶爾也會忘記將其釋放掉,從而造成記憶體洩漏。並且,在釋放的時候,我們可能對某乙個指標進行了重複釋放,導致程式崩潰的問題。為了能夠解決這些問題,從而有了智慧型指標的設計。智慧型指標一共有四種,分別...

shared ptr(智慧型指標)

只要將 new 運算子返回的指標 p 交給乙個 shared ptr 物件 託管 就不必擔心在 寫delete p語句 實際上根本不需要編寫這條語句,託管 p 的 shared ptr 物件在消亡時會自動執行delete p。而且,該 shared ptr 物件能像指標 p 樣使用,即假設託管 p ...