先說乙個重點,智慧型指標不等於引用計數,不要一提起智慧型指標,就要說引用計數。
應用場景:
相比大家都寫過一種業務型別吧,在處理開始前通過new申請了一塊記憶體,然後通過多個if ... else if ... else if ... ... else進行處理,對於這種場景,在每乙個if處理塊內部都要進行new出來的那塊記憶體的釋放,否則就造成記憶體洩漏,**太繁瑣了。此時引入智慧型指標就可以完美解決。
實現原理:
說穿了就是通過棧物件來管理堆記憶體。當棧物件出了作用域被系統自動銷毀時,其管理的堆記憶體也被釋放。是不是有點類似scoped_lock(mutex)。
c++11出來之前,只有1種智慧型指標,就是auto_ptr,c++11出來之後補充了3個智慧型指標,分別是unique_ptr shared_ptr weak_ptr。
強調一點,不是每一種智慧型指標都可以增加記憶體的引用計數。智慧型指標分為兩類,一種是可以使用多個智慧型指標管理同一塊記憶體區域,每增加乙個智慧型指標,就會增加1次引用計數,另一類是不能使用多個智慧型指標管理同一塊記憶體區域,通俗來說,當智慧型指標2來管理這一塊記憶體時,原先管理這一塊記憶體的智慧型指標1只能釋放對這一塊指標的所有權。按照這個分類標準,auto_ptr unique_ptr weak_ptr屬於後者,shared_ptr屬於前者。
智慧型指標總結
1.智慧型指標的原理 1 智慧型指標不是通常意義下的指標,而是乙個模板類,在對模板類例項化之後會產生類似於指標的行為。通過物件來管理資源。2 智慧型指標採用一種raii 資源分配即初始化 機制,在建構函式中實現對資源的分配及初始化,在析構函式中實現對資源的析構及 2.智慧型指標的分類 c 中最開始是...
智慧型指標總結
std shared ptr include class test public std enable shared from this void print intid int main std enable shared from this是乙個模板類,其中有乙個成員函式 shared ptrs...
智慧型指標總結
unique ptr weak ptr 智慧型指標與常規指標的區別 智慧型指標的選擇 智慧型指標並非c 11的原創,boost庫很早就提供了share ptr和weak ptr,c 11在此基礎上增加了unique ptr,從而形成了我們現在所說的智慧型指標。智慧型指標主要用於管理動態記憶體,當智慧...