? ? ? ?從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>,可以看到:

【為什么要用智能指針?】據(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