實現乙個shared ptr

2021-09-26 14:52:28 字數 1557 閱讀 6951

參考:

實現乙個簡單的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的刪除器是執行時繫結的 所以其型別應該是乙個指標 所以我們需要乙個函式指標 指向刪除器 類的型別這是乙個典型的類指標的類 有共用乙個指標 其實使用智慧型指...