實現乙個帶引用計數的shared ptr智慧型指標

2021-10-07 22:35:15 字數 1132 閱讀 6849

*自定義乙個myshared_ptr結構,包含引用計數、運算子、->運算子

// 自定義 shared_ptr 智慧型指標

template

<

class

t>

class

myshared_ptr

// 拷貝建構函式

myshared_ptr

(const myshared_ptr& sp)

:_ptr

(sp._ptr)

,_pcount

(sp._pcount)

// 賦值建構函式

myshared_ptr&

operator

=(myshared_ptr

& sp)

_ptr = sp._ptr;

_pcount = sp._pcount;

(*_pcount)++;

// 右值計數器 +1

}return

*this

;// 左右ptr值

}// 析構函式

~myshared_ptr()

}// *運算子

t&operator*(

)// -> 運算子

t*operator

->()

// 使用次數

intuse_count()

private

: t* _ptr;

// t* 型別指標

int* _pcount;

// 引用計數

};

再定義乙個類person,person在析構時,會有提示 :

struct person 

~person()

intprint()

};

主函式,驗證:

int

main()

// 退出主程式main{} 範圍後,person會析構一次

執行結果:

帶引用計數的智慧型指標

stl中的auto ptr是不帶有引用計數的,因此乙個實體只能被乙個auto ptr物件擁有。由於這樣的限制,才會提出auto ptr在拷貝構造或賦值操作時轉移指標所有權的處理方法。向智慧型指標中新增引用計數可以完全避免 所有權轉移 帶來的錯覺,從而規範指標不安全行為,讓智慧型指標真正smart。內...

乙個簡單的C 記憶體管理與引用計數指標

最近專案需要一些模式相對固定的記憶體申請和銷毀,手癢寫了個c 記憶體管理器和引用計數的智慧型指標,加入了一些多執行緒保護機制 未測試 見文章後半部分。在main 裡做了乙個簡單速度測試。在我的i5 4590 8g win7機器上,使用定製記憶體管理的程式耗時0.35秒,使用new delete的耗時...

arc中的引用計數操作實現

你已經知道,arc會自動幫你插入retain和release語句。arc編譯器有兩部分,分別是前端編譯器和優化器。前端編譯器會為 擁有的 每乙個物件插入相應的release語句。如果物件的所有權修飾符是 strong,那麼它就是被擁有的。如果在某個方法內建立了乙個物件,前端編譯器會在方法末尾自動插入...