智慧型指標物件中引用計數是多個智慧型指標物件共享的,兩個執行緒中智慧型指標的引用計數同時++或–,這個操作不是原子的,引用計數原來是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智慧型指標
智慧型指標是乙個行為類似指標的物件。我們在使用堆記憶體時,都需要及時地進行釋放,避免造成記憶體洩漏。但我們偶爾也會忘記將其釋放掉,從而造成記憶體洩漏。並且,在釋放的時候,我們可能對某乙個指標進行了重複釋放,導致程式崩潰的問題。為了能夠解決這些問題,從而有了智慧型指標的設計。智慧型指標一共有四種,分別...