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

2021-08-07 03:38:20 字數 709 閱讀 7152

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

template

class ref1

ref1(const ref1& copy)

}ref1& operator=(const ref1& rhs)

std::cout << "= construct2 " << std::endl;

std::cout << *scount << std::endl;

//原來已經有乙個物件了

if (scount > 0)

if (scount != nullptr)

}}this->mp = rhs.mp;

this->scount = rhs.scount;

++(*scount);

std::cout << "= construct " << std::endl;

std::cout << *scount << std::endl;

return *this;

}~ref1()

if (scount != nullptr)}}

protected:

int *scount;

t* mp;

};

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

使用智慧型指標類 輔助類 原始指標實現 輔助類 儲存引用計數和原始指標,智慧型指標型別為友元 將原來儲存在智慧型指標中的內部結構體移出來形成單獨類,智慧型指標內部不用儲存這個類的指標,通過友元來訪問這個類中成員。智慧型指標 初始化,析構,拷貝賦值,複製函式,過載 過載 通過智慧型指標的成員函式來操作...

引用計數與智慧型指標

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

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

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