C C 知識要點5 智慧型指標原理及自己定義實現

2021-09-07 12:28:56 字數 1140 閱讀 7282

智慧型指標用來管理動態物件。其行為類似於常規指標,重要的差別是:它負責自己主動釋放所指向的物件。

c++ 11標準庫提供兩種智慧型指標:shared_ptr、unique_ptr

差別是:shared_ptr同意多個指標指向同乙個物件;unique_ptr則獨佔所指向的物件。

另外。另一種weak_ptr的伴隨類,它是一種弱引用。指向shared_ptr所管理的物件。

實現方法使用引用計數方法。

智慧型指標將乙個計數器與類指向的物件相關聯,引用計數跟蹤一共同擁有多少個類物件共享同一指標。

實現要點:

每次建立類的新物件的時候,初始化指標並將引用計數置為1。

當物件作為還有一物件的副本而建立的時候,也就是拷貝構造時候,拷貝建構函式拷貝指標並新增與之相應的引用計數;

當對乙個物件進行賦值操作的時候,賦值操作符 降低左運算元所指物件的引用計數(若引用計數減為0,則刪除該物件),並新增右運算元指向物件的引用計數(由於左側指標指向了右側指標指向的物件,所以右側指標指向的物件的引用計數新增1);

呼叫析構函式時候,降低引用計數(若減為0。則刪除基礎物件);

實現智慧型指標有兩種經典策略:一是引入輔助類,二是使用控制代碼類。

以下樣例使用輔助類來實現:

#include"iostream"

using namespace std;

//定義乙個普通類

class bookclass

};//輔助類

class counter

; ~counter();

int count;

bookclass* bk;

};//智慧型指標類

class smartpoint

smartpoint(const smartpoint &sp) :rpcnt(sp.rpcnt)

smartpoint& operator= (const smartpoint& rhs)

~smartpoint()

private:

counter *rpcnt;

};

上述**,實現了乙個簡單的智慧型指標類。可編譯執行,逐條對照實現要點中的要求。

C C 知識要點5 智慧型指標原理及自定義實現

智慧型指標用來管理動態物件。其行為類似於常規指標,重要的區別是 它負責自動釋放所指向的物件。c 11標準庫提供兩種智慧型指標 shared ptr unique ptr 區別是 shared ptr允許多個指標指向同乙個物件 unique ptr則獨佔所指向的物件。另外,還有一種weak ptr的伴...

智慧型指標原理及C 實現

智慧型指標是乙個類,在類的建構函式中傳入乙個普通指標,析構函式釋放指標。引入智慧型指標是為了更好的管理記憶體,防止記憶體洩漏等問題。實現方法 採用引用計數的方法。智慧型指標將乙個計數器與類指向的物件相關聯,引用計數跟蹤共有多少個類物件共享同一指標。其遵循以下規則 1 每次建立類的新物件時,初始化指標...

智慧型指標原理及實現(1)shared ptr

c 沒有記憶體 機制,每次程式設計師new出來的物件需要手動delete,流程複雜時可能會漏掉delete,導致記憶體洩漏。於是c 引入智慧型指標,可用於動態資源管理,資源即物件的管理策略。使用 raw pointer 管理動態記憶體時,經常會遇到這樣的問題 下面的 解釋了,當乙個操作發生異常時,會...