C 智慧型指標使用

2021-07-27 04:54:13 字數 931 閱讀 9588

由於 c++ 語言沒有自動記憶體**機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行 delete 的情況並不罕見。

std::auto_ptr

、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、

、boost::weak_ptr、boost::intrusive_ptr你可能會想,如此多的智慧型指標就為了解決new、delete匹配問題,真的有必要嗎?看完這篇文章後,我想你心裡自然會有答案。

智慧型指標(smart pointer)是儲存指向動態分配(堆)物件指標的類,用於生存期控制,能夠確保自動正確的銷毀動態分配的物件,防止記憶體洩露。它的一種通用實現技術是使用引用計數(reference count)。智慧型指標類將乙個計數器與類指向的物件相關聯,引用計數跟蹤該類有多少個物件共享同一指標。每次建立類的新物件時,

初始化指標並將引用計數置為1;當物件作為另一物件的副本而建立時,拷貝建構函式拷貝指標並增加與之相應的引用計數;

對乙個物件進行賦值時,

賦值操作符減少左運算元所指物件的引用計數(如果引用計數為減至0,則刪除物件),並增加右運算元所指物件的引用計數

;呼叫析構函式時,建構函式減少引用計數(如果引用計數減至0,則刪除基礎物件)。

智慧型指標就是模擬指標動作的類。所有的智慧型指標都會過載 -> 和 * 操作符。智慧型指標還有許多其他功能,比較有用的是自動銷毀。這主要是利用棧物件的有限作用域以及臨時物件(有限作用域實現)析構函式釋放記憶體。當然,智慧型指標還不止這些,還包括複製時可以修改源物件等。智慧型指標根據需求不同,設計也不同(寫時複製,賦值即釋放物件擁有許可權、引用計數等,控制權轉移等)。auto_ptr 即是一種常見的智慧型指標。

C 智慧型指標的使用

測試環境 win7,vs2012 如果未安裝boost,請參考 涉及智慧型指標 shared ptr,weak ptr,scoped ptr,auto ptr 其它 enable shared from this 總呼叫函式 testsmartpointer 可以將其放在main 中執行。解釋在 中...

c 基礎 使用智慧型指標

三個智慧型指標模板 auto ptr unique ptr和shard ptr 都定義了類似指標的物件 c 11已將auto ptr摒棄 可以將new獲得 直接或間接 的位址賦給這種物件。當智慧型指標過期時,其析構函式將使用delete來釋放記憶體。因此,如果將new返回的位址賦給 這些物件,將無需...

C 智慧型指標的使用

c 11中提供了三種智慧型指標 unique ptr shared ptr weak ptr 來自動 堆分配的物件。unique ptr如它的名字所傳達的意思,其所指向的記憶體區不能與unique ptr定義的另乙個指標共享。看 比較容易理解。include include using namesp...