C 之《智慧型指標》

2021-10-08 23:16:27 字數 833 閱讀 9197

智慧型指標的作用是管理乙個指標,因為使用指標申請堆記憶體空間時會存在以下問題:申請的記憶體空間在程式結束時忘記釋放,造成記憶體洩漏;同一塊記憶體空間被二次釋放。使用智慧型指標可以在很大程度上避免這些問題,因為智慧型指標就是乙個類,當超出了類的作用域時,類會自動呼叫析構函式,析構函式會自動釋放資源。所以智慧型指標的作用原理就是在程式結束時自動釋放記憶體空間,不需要手動釋放記憶體空間

(1)shared_ptr:多個指標指向同乙個物件。shared_ptr使用引用計數,每乙個shared_ptr的拷貝都指向相同的記憶體。每使用他一次,內部的引用計數加1,每析構一次,內部的引用計數減1,減為0時,自動刪除所指向的堆記憶體。

(2)unique_ptr:同一時刻只能有乙個unique_ptr指向給定物件(通過禁止拷貝語義、只有移動語義來實現)。unique_ptr指標本身的生命週期:從unique_ptr指標建立時開始,直到離開作用域。

(3)weak_ptr是為了配合shared_ptr而引入的一種智慧型指標,因為它不具有普通指標的行為,它的最大作用在於協助shared_ptr工作,像旁觀者那樣觀測資源的使用情況。weak_ptr可以從乙個shared_ptr或者另乙個weak_ptr物件構造,獲得資源的觀測權。但weak_ptr沒有共享資源,它的構造不會引起指標引用計數的增加。使用weak_ptr的成員函式use_count()可以觀測資源的引用計數,另乙個成員函式expired()的功能等價於use_count()==0,但更快,表示被觀測的資源(也就是shared_ptr的管理的資源)已經不復存在。weak_ptr可以使用乙個非常重要的成員函式lock()從被觀測的shared_ptr獲得乙個可用的shared_ptr物件, 從而操作資源。

C 之智慧型指標

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

C 之智慧型指標

c 中有四個智慧型指標 auto ptr,shared ptr,weak ptr,unique ptr,其中後三個是c 11支援,並且第乙個已經被c 11棄用。智慧型指標從書面意思來說,就是智慧型。主要是動態記憶體的使用很容易出問題,要在正確的時間正確釋放記憶體是很困難的。有時我們可能忘了釋放記憶體...

c 之智慧型指標

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