shared ptr的簡單實現

2021-10-05 00:21:12 字數 1401 閱讀 6698

shared_ptr:使用引用計數

傳入指標的建構函式

拷貝建構函式

賦值函式

析構函式

獲取引用計數

->和*的過載

注意事項

建構函式是explicit的,防止smart_ptr< int > sp = p 的使用

計數需要用int*

*ptr++是先++的,所以需要括號或者++*ptr

smart_ptr.h

template

<

typename t>

class

smart_ptr

;

smart_ptr.cpp

template

<

typename t>

smart_ptr

::smart_ptr

(t* p)

:ptr

(p),

count

(new

int(1)

)template

<

typename t>

smart_ptr

::smart_ptr

(smart_ptr

& other)

++*other.count;

ptr = other.ptr;

count = other.count;

}template

<

typename t>

smart_ptr

& smart_ptr

::operator

=(smart_ptr

& other)

ptr = other.ptr;

count = other.count;

++*count;

}return

*this;}

template

<

typename t>

smart_ptr::~

smart_ptr()

ptr =

nullptr

; count =

nullptr;}

template

<

typename t>

int smart_ptr

::use_count()

template

<

typename t>

t* smart_ptr

::operator

->()

template

<

typename t>

t& smart_ptr

::operator*(

)

簡單實現shared ptr

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

shared ptr的簡單實現

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

實現乙個簡單的 shared ptr

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