引用計數與智慧型指標

2021-09-11 17:00:19 字數 710 閱讀 3168

c++沒有完善的gc機制,直到c++11才在stl中正式引入了智慧型指標。出現在庫中說明智慧型指標不是語言特性。c++智慧型指標實現了部分自動記憶體管理的目的。

引用計數是使用資源管理函式(構造析構複製等函式)和作用域原理實現的。每塊動態分配的記憶體(堆記憶體)都維護乙個相應的計數器,來記錄指向該記憶體的變數數目,當值為0時,意味著沒有變數再使用該部分記憶體,意味著可以刪除掉。

引用計數會根據作用域來實時動態的釋放記憶體,效率極高,這是它的優點。但是它也有巨大的缺點,就是迴圈引用,迴圈引用後的引用計數永不為0,就會造成記憶體洩漏。這時候就需要其他的gc演算法來解決了。

智慧型指標使用引用計數方法來管理記憶體

template class ptr 

explicit ptr(t * ptr)

: ptr_(ptr)

ptr(const ptr& other)

ptr& operator=(const ptr& other)

~ptr() }

t * get() const

private:

int refx(int * rc, int delta)

t * ptr_ = nullptr;

int * refcnt_ = nullptr;

};class a {};

int main()

} return 0;

}

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

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...

帶引用計數的智慧型指標

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