1. 程式人生 > >最簡單的智慧指標總結和教程

最簡單的智慧指標總結和教程

先說一個重點,智慧指標不等於引用計數,不要一提起智慧指標,就要說引用計數。

應用場景:

相比大家都寫過一種業務型別吧,在處理開始前通過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屬於後者。