一、簡介
由於 c++ 語言沒有自動記憶體**機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行delete 的情況並不罕見。
用智慧型指標便可以有效緩解這類問題,本文主要講解參見的智慧型指標的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::weak_ptr、boost:: intrusive_ptr。你可能會想,如此多的智慧型指標就為了解決new、delete匹配問題,真的有必要嗎?
二 使用
智慧型指標實際上是乙個棧物件,並非指標型別,在棧物件生命期即將結束時,智慧型指標通過析構函式釋放有它管理的堆記憶體。所有智慧型指標都過載了「operator->」操作符,直接返回物件的引用,用以操作物件。訪問智慧型指標原來的方法則使用「.」操作符。
訪問智慧型指標包含的裸指標則可以用 get() 函式。由於智慧型指標是乙個物件,所以if (my_smart_object)永遠為真,要判斷智慧型指標的裸指標是否為空,需要這樣判斷:if (my_smart_object.get())。
智慧型指標包含了 reset() 方法,如果不傳遞引數(或者傳遞 null),則智慧型指標會釋放當前管理的記憶體。如果傳遞乙個物件,則智慧型指標會釋放當前物件,來管理新傳入的物件。
三 具體用法
1.boost::shared_ptr:
#include
#include
class a
};int main(int argc, char **argv)
C Boost庫智慧型指標 shared ptr
智慧型指標 shared ptr 共享智慧型指標 shared ptr 是最像指標的智慧型指標,是boost.smart ptr庫中最有價值 最重要的組成部分,也是最有用的,boost庫的許多元件 甚至還包括其他一些領域的智慧型指標都使用了shared ptr.shared ptr與scoped p...
C Boost 使用方法(智慧型指標)
參考資料 智慧型指標 std auto ptr 基本上就像是個普通的指標 通過位址來訪問乙個動態分配的物件。std auto ptr 之所以被看作是智慧型指標,是因為它會在析構的時候呼叫 delete 操作符來自動釋放所包含的物件。當然這要求在初始化的時候,傳給它乙個由 new 操作符返回的物件的位...
智慧型指標詳解
智慧型指標就是用乙個類來封裝乙個指標 主要負責自動的來釋放記憶體,防止發生記憶體洩漏 智慧型指標中儲存的是指向動態物件的指標,用於動態物件生存週期的控制,能夠確保自動且正確的銷毀動態物件,防止記憶體洩漏。智慧型指標的主要作用就是利用棧智慧型指標離開作用域的時候呼叫析構函式釋放資源。下面我們介紹四類智...