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...