Boost庫智慧型指標學習

2021-06-27 00:49:52 字數 2679 閱讀 8850

參見《

boost

程式庫完全開放指南》第3

章記憶體管理

所有示例,採用

vs2010

開發工具(

vs2005

也適用),均為

win32

控制台程式。

boost

庫的配置可參照:

1

、scoped_ptr

內動態管理記憶體。但所有權不能轉讓,不能進行賦值操作。

示例**如下。

#include"stdafx.h"

#include

#include

#include

using namespacestd;

using namespaceboost;

int _tmain(intargc, _tchar* argv)

2

、scoped_array

包裝了new

操作符,為動態陣列提供了乙個**。但所有權不能轉讓。

示例**如下。

#include"stdafx.h"

#include

#include

#include

using namespacestd;

using namespaceboost;

int _tmain(intargc, _tchar* argv)

3

shared_ptr

最有價值最有用的智慧型指標。封裝記憶體建立釋放,可自由拷貝和賦值,能安全地放到標準容器中。 彌補

auto_ptr

因為轉義語義不能作為

stl容器元素的缺陷。

ps:採用

vs2010

時,發現

shared_ptr

已經是新的標準庫的乙個主要成員。

示例**如下。

#include"stdafx.h"

#include

#include

#include

using namespacestd;

using namespaceboost;

int _tmain(intargc, _tchar* argv)

另,橋接器模式的應用。

#include"stdafx.h"

#include

#include

using namespacestd;

class sample ;

classsample::impl

}; sample::sample()

: p(new impl)

voidsample::print()

int _tmain(intargc, _tchar* argv)

4

、shared_array

使用類似

shared_ptr

,包裝了

new操作符。使用引用計數機制為動態陣列提供乙個**。

說明:shared_array

不提供索引的範圍檢查,建議使用

shared_ptr

或vector

來代替。

5

weak_ptr

shared_ptr

的助手,協助

shared_ptr

工作。不增加引用計數,不對資源進行操作,作為乙個靜靜的觀察者。

常用方法,用

lock()

從被觀測的

shared_ptr

獲得乙個可用的

shared_ptr

物件,從而操作資源。

#include"stdafx.h"

#include

#include

using namespacestd;

int _tmain(intargc, _tchar* argv)

assert(wp.use_count() == 1);

//設定shared_ptr失效

sp.reset();

assert(wp.expired());

//weak_ptr

將獲得乙個空指標

assert(!wp.lock());

return 0; }

6

make_shared

make_shared

工廠函式代替

new操作符。

示例**如下。

#include"stdafx.h"

#include

#include

#include

#include

#include

using namespacestd;

int _tmain(intargc, _tchar* argv)

cout<

boost::shared_ptrp = v[9];

*p = 100;

cout<<*v[9]<

return 0; }

boost庫學習 智慧型指標

智慧型指標是利用raii 在物件的建構函式中執行資源的獲取 指標的初始化 在析構函式中釋放 delete 指標 這種技法把它稱之為raii resource acquisition is initialization 資源獲取即初始化 來管理資源。其本質思想是 將堆物件的生存期用棧物件 智慧型指標 ...

boost庫智慧型指標

程式的記憶體資源管理一直是個比較麻煩的問題,c 程式在引入智慧型指標之前,new出來的記憶體,需要自己手動的銷毀,自己去管理申請堆記憶體的生命週期。有的時候難免會遺漏對資源的釋放銷毀。智慧型指標則能很好的解決記憶體管理的問題,不但能很好的管理裸指標,還能管理記憶體資源 raii 機制。前借助boos...

Boost庫系列 智慧型指標

合理使用boost智慧型指標,直接記憶體釋放問題,你只管new,不需考慮delete,甚至new也不用你new 例如由make shared函式返回shared ptr智慧型指標 1 標頭檔案 智慧型指標標頭檔案 使用make unique 函式用到 使用owner less所有權比較函式物件時用到...