智慧型指標用來管理動態物件。其行為類似於常規指標,重要的差別是:它負責自己主動釋放所指向的物件。
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 管理動態記憶體時,經常會遇到這樣的問題 下面的 解釋了,當乙個操作發生異常時,會...