shared ptr的簡單實現

2021-09-22 19:12:29 字數 829 閱讀 3650

前面講到auto_ptr有個很大的缺陷就是所有權的轉移,就是乙個物件的記憶體塊只能被乙個智慧型指標物件所擁有.但我們有些時候希望共用那個記憶體塊.於是c++ 11標準中有了shared_ptr這樣的智慧型指標,顧名思義,有個shared表明共享嘛.所以shared_ptr型別的智慧型指標可以做為stl容器的元素

下面我們來瞧瞧shared_ptr具體是咋實現的.相較auto_ptr有下面幾個不同的地方:

1.引進了乙個計數器shared_count,用來表示當前有多少個智慧型指標物件共享指標指向的記憶體塊

2.析構函式中不是直接釋放指標對應的記憶體塊,如果shared_count大於1則不釋放記憶體只是將引用計數減1,只是計數等於1時釋放記憶體

3.複製構造與賦值操作符只是提供一般意義上的複製功能,並且將引用計數加1.

#include using

namespace

std;

template

class

shared_ptr

~shared_ptr()

void

deconstruct()

shared_count--;

}t& operator*()

t* operator->() //

複製建構函式

shared_ptr(shared_ptr&sp):m_ptr(sp.m_ptr),shared_count(sp.shared_count)

//過載運算子=

shared_ptr& operator = (shared_ptr&sp) 

};

簡單實現shared ptr

這是乙個簡單的實現shared ptr的過程 因為是小練習的緣故 其中有些地方邏輯可能並不嚴密 希望大家指正 注意點刪除器因為shared ptr的刪除器是執行時繫結的 所以其型別應該是乙個指標 所以我們需要乙個函式指標 指向刪除器 類的型別這是乙個典型的類指標的類 有共用乙個指標 其實使用智慧型指...

shared ptr的簡單實現

shared ptr 使用引用計數 傳入指標的建構函式 拷貝建構函式 賦值函式 析構函式 獲取引用計數 和 的過載 注意事項 建構函式是explicit的,防止smart ptr int sp p 的使用 計數需要用int ptr 是先 的,所以需要括號或者 ptr smart ptr.h temp...

實現乙個簡單的 shared ptr

智慧型指標的作用有如同指標,但會記錄有多少個 shared ptrs 共同指向乙個物件。這便是所謂的引用計數。一旦最後乙個這樣的指標被銷毀,也就是一旦某個物件的引用計數變為 0,這個物件會被自動刪除。shared ptr 的實現機制其實就是在拷貝構造時使用同乙份引用計數。同乙個 shared ptr...