C 之手撕引用計數的智慧型指標

2021-10-08 12:37:18 字數 943 閱讀 7200

1、實現多個智慧型指標指向同乙個資源,不會造成指標失效,也不會造成資源被多次釋放。

2、缺點是多執行緒環境下,不安全,需要加鎖。

#include

#include

using

namespace std;

template

<

typename t>

class

refcnt}~

refcnt()

}int

addref()

intcutref()

private

:int count;

t *mptr;};

template

<

typename t>

class

smart_ptr

; t *

operator

->()

t &operator*(

)~smart_ptr()

ptr=

nullptr;}

smart_ptr

(const smart_ptr

&src)

:ptr

(src)

,refcnt

(src.refcnt)

} smart_ptr

&operator=(

const smart_ptr

&src)

ptr=src.ptr;

refcnt=src.refcnt;

refcnt-

>

addref()

;}private

: t *ptr;

refcnt

* refcnt;};

class

test};

intmain()

c 實現引用計數智慧型指標

主要的思路是使用乙個int 的指標進行計數,在建構函式時候設定為0,並加1 或者直接設定為1 然後賦值和複製構造時候把int 和資料儲存的指標t mp傳到另外乙個類中。在賦值的時候要注意左邊的指標是否已經有資料了,有資料就要先 1,然後再進行賦值。template class ref1 ref1 c...

引用計數與智慧型指標

c 沒有完善的gc機制,直到c 11才在stl中正式引入了智慧型指標。出現在庫中說明智慧型指標不是語言特性。c 智慧型指標實現了部分自動記憶體管理的目的。引用計數是使用資源管理函式 構造析構複製等函式 和作用域原理實現的。每塊動態分配的記憶體 堆記憶體 都維護乙個相應的計數器,來記錄指向該記憶體的變...

基於引用計數的智慧型指標

pragma once include includeusing namespace std templateclass smartpointer smartpointer smartpointer src 拷貝建構函式 t operator 操作符過載,注意返回型別 t operator 操作符過...