共享智慧型指標 SharePtr 的C 實現

2021-09-26 23:11:55 字數 2306 閱讀 9385

主要實現思想是引用計數法,在shareptr類拷貝(copy)和賦值(=)的時候引用計數加1,而在shareptr類變數析構的時候引用計數減少1

(1)shareptr包裹類變數指標和引用計數指標int*, 這裡引用計數採用 int* 為了在各個shareptr變數實現計數共享,每個變數的計數變化都會影響其他計數

enum ethreadtype

;templateclass shareptr

//賦值構造

shareptr& operator=(const shareptr& other)

void assignment(const shareptr& other)

if (ethreadtype::multithread == threadtype)

threadmutex.unlock();

}

(3)析構引用計數減少1,當減少為0,則析構共享指標儲存的物件的記憶體

void decrease()

delete count;

count = nullptr;

}} if (ethreadtype::multithread == threadtype)

threadmutex.unlock();

} ~shareptr()

(4)共享指標shareptr總體實現,設計了makeshared模板函式實現了不定形參,支援模板類物件的建構函式不定形參,和c++ stl的make_shared具備相同的效果

enum ethreadtype

;templateclass shareptr

//拷貝構造,相當於shareptr(const shareptr& other)

shareptr(const shareptr& other)

//賦值構造

shareptr& operator=(const shareptr& other)

objecttype* operator->()

~shareptr()

private:

void assignment(const shareptr& other)

if (ethreadtype::multithread == threadtype)

threadmutex.unlock();

} void decrease()

delete count;

count = nullptr;

}} if (ethreadtype::multithread == threadtype)

threadmutex.unlock();

}public:

templatevoid initobject(args&&...args)

if (nullptr != count)

objectptr = new objecttype(std::forward(args)...);

count = new int;

*count = 1;

} templatefriend shareptrmakeshared(args&&...args);

};//發生拷貝構造在析構

templateshareptrmakeshared(args&&...args)

(5)shareptr不提供直接new構造物件的函式,是考慮到智慧型指標的濫用,二次gc導致delete空指標而程式崩潰, 僅僅開放出makeshared介面來返回共享指標物件。 下面的用stl的共享指標shared_ptr濫用導致程式崩潰

class uobject

~uobject()

float getvalue()

private:

float value;

};void func()

int main()

正確使用樣例:

(6)因為是玩具版共享指標,沒有像stl的共享指標一樣使用atomic計數器,更無法解決共享指標的多執行緒安全問題

智慧型指標share ptr記錄

shared ptr 是乙個共享所有權的智慧型指標,允許多個指標指向同乙個物件。shared ptr 物件除了包括乙個物件的指標,還包括乙個引用計數器。當每給物件分配乙個share ptr的時候,引用計數加一 每reset乙個share ptr,或者修改物件的指向 指向其他物件或者賦值nullptr...

智慧型指標share ptr 簡單剖析

本文 話不多說直接上碼!shared ptr的簡單實現版本 基於引用記數的智慧型指標 namespace boost 空間庫boost templateshared ptr y py shared ptr constshared ptr r px r.px templateshared ptr co...

智慧型指標之共享指標

智慧型指標是儲存指向動態分配物件指標的類。三種智慧型指標 std shared ptr std unique ptr std weak ptr.使用時需要加上標頭檔案 include 1.共享智慧型指標 shared ptr 初始化 shared ptr初始化可以通過reset方法初始化shared...