參考:
實現乙個簡單的shared_ptr
智慧型指標原理及實現(1)shared_ptr
寫的很棒,學習一波。
一句話介紹shared_ptr智慧型指標:多個shared_ptr中的t *ptr能指向同乙個記憶體區域(同乙個物件),並共同維護同乙個引用計數器。
一般來說,智慧型指標的實現需要以下步驟:
1.乙個模板指標t* ptr,指向實際的物件。
2.乙個引用次數(必須new出來的,不然會多個shared_ptr裡面會有不同的引用次數而導致多次delete)。
3.過載operator*和operator->,使得能像指標一樣使用shared_ptr。
4.過載copy constructor,使其引用次數加一。
5.過載operator=,如果原來的shared_ptr已經有物件,則讓其引用次數減一併判斷引用是否為零(是否呼叫delete)。
然後將新的物件引用次數加一。
6.過載析構函式,使引用次數減一併判斷引用是否為零(是否呼叫delete)。
#include #include using namespace std;
template class shared_ptr
// 建構函式 count必須new出來
shared_ptr(t* p) : count(new int(1)), _ptr(p) {}
// 拷貝建構函式 使其引用次數加一
shared_ptr(shared_ptr& other) : count(&(++ *other.count)), _ptr(other._ptr){}
// 過載 operator*和operator-> 實現指標功能
t* operator->()
t& operator*()
// 過載operator=
// 如果原來的shared_ptr已經有物件,則讓其引用次數減一併判斷引用是否為零(是否呼叫delete)。
// 然後將新的物件引用次數加一。
shared_ptr& operator=(shared_ptr& other)
this->_ptr = other._ptr;
this->count = other.count;
return *this;
} // 析構函式 使引用次數減一併判斷引用是否為零(是否呼叫delete)。
~shared_ptr() }
int getref()
private:
int* count; // should be int*, rather than int
t* _ptr;
};
測試案例:
int main(int argc, const char * ar**)
結果: 實現乙個簡單的 shared ptr
智慧型指標的作用有如同指標,但會記錄有多少個 shared ptrs 共同指向乙個物件。這便是所謂的引用計數。一旦最後乙個這樣的指標被銷毀,也就是一旦某個物件的引用計數變為 0,這個物件會被自動刪除。shared ptr 的實現機制其實就是在拷貝構造時使用同乙份引用計數。同乙個 shared ptr...
實現乙個帶引用計數的shared ptr智慧型指標
自定義乙個myshared ptr結構,包含引用計數 運算子 運算子 自定義 shared ptr 智慧型指標 template class t class myshared ptr 拷貝建構函式 myshared ptr const myshared ptr sp ptr sp.ptr pcoun...
簡單實現shared ptr
這是乙個簡單的實現shared ptr的過程 因為是小練習的緣故 其中有些地方邏輯可能並不嚴密 希望大家指正 注意點刪除器因為shared ptr的刪除器是執行時繫結的 所以其型別應該是乙個指標 所以我們需要乙個函式指標 指向刪除器 類的型別這是乙個典型的類指標的類 有共用乙個指標 其實使用智慧型指...