帶引用計數的智慧型指標

2021-08-26 06:17:41 字數 962 閱讀 2738

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

內建指標和引用計數分別占有一塊堆記憶體,分別用t* ptr和int* pcnt來儲存它們的位址。當然,也可以將它們擺放到相鄰的位置上,不過這會增加實現的難度,不便於我們理解引用計數的實現。smartptr的**如下所示:

// smartptr

templateclass smartptr

smartptr(const smartptr& src):ptr(src.ptr),pcnt(src.pcnt)

smartptr& operator=(const smartptr& rhs)

return (*this);

} t* operator->()

const t* operator->()const

t& operator*()

const t& operator*()const

~smartptr()

private:

t* ptr;

int *pcnt;

void release() }

};

在main函式中,編寫以下**進行測試:

#include#include#include#include"smartptr.h"

class userinfo

void displayuser()

~userinfo()

private:

char strname[10];

char strnation[10];

};int main()

輸出結果為:

引用計數與智慧型指標

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

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

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

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

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