C 之智慧型指標

2021-08-25 06:07:42 字數 1997 閱讀 3176

c++中有四個智慧型指標:auto_ptr, shared_ptr, weak_ptr, unique_ptr,其中後三個是c++11支援,並且第乙個已經被c++11棄用。

智慧型指標從書面意思來說,就是智慧型。主要是動態記憶體的使用很容易出問題,要在正確的時間正確釋放記憶體是很困難的。有時我們可能忘了釋放記憶體,會導致記憶體洩漏;有時我們使用乙個已經釋放了的記憶體的指標,會產生引用非法記憶體的指標。

所以,使用智慧型指標就可以避免這種情況的方式。

雖然這個類已經被c++11棄用了,還是簡單了解下

其中,get()是auto_ptr類的成員函式,返回乙個原始指標,成員函式reset()重新繫結指向的物件,會釋放原來的物件。

可以看出來,使用 = 進行輔助的時候,p2之前的物件會被釋放,p2接管p1的記憶體管理權,p1變成了空指標,而且判斷智慧型指標是否為空,應該使用if(p1.get() == null)。這樣一來,感覺auto_ptr有不小的問題。

使用release()釋放

int main()

release()只是放棄了原來物件的記憶體管理權,並沒有釋放物件的記憶體,要釋放物件的記憶體,應該使用p1.reset();,是不是感覺很奇怪?難怪c++11要棄用它。

官方文件

share是共享的意思,它使用計數機制來表明有幾個指標管理這個資源,使用use_count()成員函式檢視資源所有者個數。當指向乙個物件的最後乙個share_ptr被銷毀的時候,share_ptr類會自動銷毀此物件。

int main()

使用make_shared函式,是最安全的分配和使用動態記憶體的方法。

當p1和p2都沒有指向之前的物件的時候,計數器為0,釋放物件的記憶體。

官方文件

要強制銷毀unique_ptr類指向的物件,應該使用成員函式reset()或者對其進行賦值操作

官方文件

C 之智慧型指標

本文發表於1999年10月份的c c users journal,17 10 1.為什麼稱它為 自動 指標?auto ptr只是眾多可能的智慧型指標之一。許多商業庫提供了更複雜的智慧型指標,用途廣泛而令人驚異,從管理引用的數量到提供先進的 服務。可以把標準c auto ptr看作智慧型指標的ford...

c 之智慧型指標

設計出乙個class像指標,但是功能更強大,分為兩種形式一種是標準庫的源 早期的指標,多半是過載 和 第二種是迭代器的智慧型指標 1.早期的智慧型指標 templateclass shared ptr t operator const shared ptr t p px p private t px...

C 之「智慧型指標」

1.引入 要確保用 new 動態分配的記憶體空間在程式的各條執行路徑都能被釋放是一件麻煩的事情。c 11 模板庫的 標頭檔案中定義的智慧型指標,即 shared ptr 模板,就是用來部分解決這個問題的。只要將 new 運算子返回的指標 p 交給乙個 shared ptr 物件 託管 就不需要再單獨...