C 智慧型指標shared ptr的實現

2021-10-08 14:09:02 字數 1036 閱讀 1596

智慧型指標物件中引用計數是多個智慧型指標物件共享的,兩個執行緒中智慧型指標的引用計數同時++或–,這個操作不是原子的,引用計數原來是1,++了兩次,可能只實際只有乙個加生效了,引用計數是2,這樣引用計數就錯亂了。會導致資源未釋放或者程式崩潰的問題。所以只能指標中引用計數++、–是需要加鎖的,也就是說引用計數的操作是執行緒安全的 。

#include

#include

template

<

class

t>

class

sharedptr

~sharedptr()

sharedptr

(const sharedptr

& sp)

:_ptr

(sp._ptr)

,_prefcount

(sp._prefcount)

,_pmutex

(sp._pmutex)

// sp1 = sp2

sharedptr

&operator=(

const sharedptr

& sp)

return

*this;}

t&operator*(

) t*

operator

->()

intusecount()

t*get()

void

addrefcount()

private

:void

release()

_pmutex.

unlock()

;if(deleteflag ==

true

)delete _pmutex;

}private

:int

* _prefcount;

// 引用計數

t* _ptr;

// 指向管理資源的指標

mutex* _pmutex;

// 互斥鎖};

intmain()

c 智慧型指標 shared ptr

為了更容易更方便的使用動態記憶體,c 提供了兩種智慧型指標shared ptr和unique ptr來管理動態物件,智慧型指標負責自動釋放所管理的物件,避免因為不合適的釋放導致的記憶體洩露和訪問已釋放記憶體的bug 智慧型指標也是模板,建立乙個智慧型指標時,必須提供額外的型別資訊,如shared p...

C 智慧型指標 shared ptr

shared ptr 是乙個標準的共享所有權的智慧型指標,允許多個指標指向同乙個物件.定義在 memory 檔案中 非memory.h 命名空間為 std.shared ptr 是為了解決 auto ptr 在物件所有權上的侷限性 auto ptr 是獨佔的 在使用引用計數的機制上提供了可以共享所有...

shared ptr智慧型指標

智慧型指標是乙個行為類似指標的物件。我們在使用堆記憶體時,都需要及時地進行釋放,避免造成記憶體洩漏。但我們偶爾也會忘記將其釋放掉,從而造成記憶體洩漏。並且,在釋放的時候,我們可能對某乙個指標進行了重複釋放,導致程式崩潰的問題。為了能夠解決這些問題,從而有了智慧型指標的設計。智慧型指標一共有四種,分別...