1. 程式人生 > >C++ Boost智慧指標詳解

C++ Boost智慧指標詳解

一、簡介
由於 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 <stdio.h>
#include <boost/shared_ptr.hpp>

class A {
public:
void print() {
printf("class A print!\n");
}
};

int main(int argc, char **argv) {
boost::shared_ptr<A> a1(new A());
a1->print();
}