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