boost 智慧型指標

2021-06-19 18:59:32 字數 1724 閱讀 8205



boost::shared_ptr

的記憶體管理機制:

boost::shared_ptr

的管理機制其實並不複雜,就是對所管理的物件進行了引用計數,當新增乙個

boost::shared_ptr

對該物件進行管理時,就將該物件的引用計數加一;減少乙個

boost::shared_ptr

對該物件進行管理時,就將該物件的引用計數減一,如果該物件的引用計數為

0的時候,說明沒有任何指針對其管理,才呼叫

delete

釋放其所佔的記憶體。

上面的那個例子可以的圖示如下:1.

sp1對

implementation

物件進行管理,其引用計數為1

2. 增加sp2

對implementation

物件進行管理,其引用計數增加為2

3. sp1釋放對

implementation

物件進行管理,其引用計數變為1

4. sp2釋放對

implementation

物件進行管理,其引用計數變為

0,該物件被自動刪除

boost::shared_ptr

的特點:

和前面介紹的

boost::scoped_ptr

相比,boost::shared_ptr

可以共享物件的所有權,因此其使用範圍基本上沒有什麼限制(還是有一些需要遵循的使用規則,下文中介紹),自然也可以使用在

stl的容器中。另外它還是執行緒安全的,這點在多執行緒程式中也非常重要。

boost::shared_ptr

的使用規則:

boost::shared_ptr

並不是絕對安全,下面幾條規則能使我們更加安全的使用

boost::shared_ptr:1.

避免對shared_ptr

所管理的物件的直接記憶體管理操作,以免造成該物件的重釋放2.

shared_ptr

並不能對迴圈引用的物件記憶體自動管理(這點是其它各種引用計數管理記憶體方式的通病)。3.

不要構造乙個臨時的

shared_ptr

作為函式的引數。

如下列**則可能導致記憶體洩漏:

void test()

正確的用法為:

void test()

下面是例項:

#include #include #include #include #include using namespace std;

class test_shared_ptr : public boost::enable_shared_from_this;

void print() ;

int x;

};void test001()

void test002()

void test003()

void test004()

class implementation

void do_something()

};void test_implementation()

{ boost::shared_ptrsp1(new implementation());

sp1->do_something();

std::cout<<"the sample now has "std::cout<<"the sample now has "<

boost 智慧型指標

最近使用boost的智慧型指標,檢視了一些帖子。總結如下 智慧型指標分類 智慧型指標使用注意事項 多執行緒安全性分析 這個帖子的結論很好,1 shared ptr是乙個非常實用的智慧型指標。2 shared ptr的實現機制是在拷貝構造時使用同乙份引用計數。3 對同乙個shared ptr的寫操作不...

boost 智慧型指標

shared 指標類似於乙個帶計數器的指標,當指標計數次數為0時,它將自動析構物件。shared ptr指標可通過一次new出來,一直向下傳遞,直到每次析構shared ptr時將該指標引用量 1 注 每次進行不帶引用的傳遞時呼叫次數會加1,但析構時同時會 1,若用引用傳遞,每次呼叫值不增加,但同樣...

Boost智慧型指標 shared ptr

boost scoped ptr雖然簡單易用,但它不能共享所有權的特性卻大大限制了其使用範圍,而boost shared ptr可以解決這一侷限。顧名思義,boost shared ptr是可以共享所有權的智慧型指標,首先讓我們通過乙個例子看看它的基本用法 該程式的輸出結果如下 the sample...