C++智能指針(Smart Pointer)

? ? ? ?從C++11開始,智能指針進入標(biāo)準(zhǔn)庫,std::unique_ptr,?std::shared_ptr 和 std::weak_ptr。那:

1,什么是智能指針?

2,為什么要用智能指針?

3,如何選用std::auto_ptr,std::unique_ptr,?std::shared_ptr 和std::weak_ptr呢?

什么是智能指針?】智能指針(Smart Pointer)本質(zhì)是一個類(class),行為類似普通指針,都可以解引用(dereference)。它把指向?qū)ο蟮钠胀ㄖ羔樅蛯ο蟮膬?nèi)存管理封裝起來,自動管理對象的生存期。

智能指針在頭文件<memory>中定義,打開<memory>,可以看到:

auto_ptr的定義

為什么要用智能指針?】據(jù)統(tǒng)計,C++ 最常發(fā)生的bugs是與指針和內(nèi)存管理相關(guān)的bugs,例如:空懸指針(dangling pointers), 野指針(Wild pointer),內(nèi)存泄漏(memory leaks), 分配內(nèi)存失敗(allocation failures)等等。 智能指針可以協(xié)助程序員解決這些令人頭痛的事情,自動處理內(nèi)存分配和釋放問題。

如何選用std::auto_ptr,std::unique_ptr,?std::shared_ptr?和std::weak_ptr呢?】

當(dāng)允許多個指針指向同一個對象時,使用shared_ptr

當(dāng)只允許一根指針“獨占”所指向的對象時,使用unique_ptr

weak_ptr?是一種不控制對象生命周期的智能指針, 它指向一個 shared_ptr 管理的對象。進行該對象的內(nèi)存管理的是那個強引用的 shared_ptr。weak_ptr只是提供了對管理對象的一個訪問手段。weak_ptr 設(shè)計的目的是為配合 shared_ptr 而引入的一種智能指針來協(xié)助 shared_ptr 工作, 它只可以從一個 shared_ptr 或另一個 weak_ptr 對象構(gòu)造, 它的構(gòu)造和析構(gòu)不會引起引用記數(shù)的增加或減少。

auto_ptr在C++03標(biāo)準(zhǔn)中定義了,但在C++11標(biāo)準(zhǔn)中被廢棄(deprecated)。

參考資料來源:http://www.cplusplus.com

LabVIEW中調(diào)用帶指針的C++函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容