C 智慧型指標之boost

2021-08-14 12:04:36 字數 1625 閱讀 7169

參考文獻:

std:: auto_ptr中的智慧型指標有如下缺點:

(1)auto_ptr不能共享所有權;

(2)auto_ptr不能指向陣列;

(3)auto_ptr不能作為容器的成員;

(4)不能通過賦值操作來初始化auto_ptr;

std::auto_ptrp(new int(42));     //ok

std::auto_ptrp = new int(42);    //error

(5)不要把auto_ptr放入容器。

scoped_ptr

簡單的單一物件的唯一所有權。不可拷貝。

scoped_array

簡單的陣列的唯一所有權。不可拷貝。

shared_ptr

在多個指標間共享的物件所有權。

shared_array

在多個指標間共享的陣列所有權。

weak_ptr

乙個屬於 shared_ptr 的物件的無所有權的觀察者。

intrusive_ptr

帶有乙個侵入式引用計數的物件的共享所有權。

智慧型指標scoped的使用:

void sample1_plain()

psample->use();

delete psample;

}

#include "boost/smart_ptr.h"

void sample1_scopedptr()

智慧型指標shared

的使用:

boost庫中的智慧型指標是通過引用計數值來確定物件是否應該被釋放。強引用是當引用物件活著時,這引用也存在,shared_ptr就是強引用;而弱引用的引用物件活著時不一定存在,不修改引用計數值,只是普通的指標,但弱引用能檢查物件是否已經被釋放,避免訪問非法記憶體。

boost::weak_ptr必須從乙個boost::share_ptr或另乙個boost::weak_ptr轉換而來,當物件存在迴圈引用時,引用計數值為1,也就存在無法釋放記憶體的問題,採用弱指標可以解決該問題,弱指標不更改引用計數,只需將迴圈引用的一方使用弱引用即可:

typedef boost::shared_ptrparent_ptr;

typedef boost::shared_ptrchildren_ptr;

class parent ;

class children ;

class children ;

boost 之 智慧型指標

smart ptr簡介 boost中智慧型指標 smart ptr 解決了每次 new 出來的記憶體不需要人為delete 智慧型指標包括 auto ptr,scoped ptr,scoped array,shared ptr,shared array,weak ptr。auto ptr std a...

boost 智慧型指標

boost shared ptr 的記憶體管理機制 boost shared ptr 的管理機制其實並不複雜,就是對所管理的物件進行了引用計數,當新增乙個 boost shared ptr 對該物件進行管理時,就將該物件的引用計數加一 減少乙個 boost shared ptr 對該物件進行管理時,...

boost 智慧型指標

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