C 的boost學習 記憶體管理

2021-07-01 21:31:00 字數 1485 閱讀 8242

boost庫的記憶體處理

智慧型指標

1,scoped_ptr

不允許拷貝,賦值,只能在被宣告的作用域中使用,不需要使用delete釋放資源,自動釋放資源,可以獲得與原始指標同樣的速度。

#include

#include

using namespace std;

void usagescopedptr();

class test

void usagescopedptr()

2,auto_ptr指標

用法幾乎和scoped_ptr一樣,區別就是auto_ptr會被轉移,而scoped_ptr不會被轉移,編譯期會報錯。

scoped_ptr只能在被宣告的作用域使用,不能轉移,在**後期維護階段很重要。

#include

#include

using namespace std;

void usagescopedptr();

void usageautoptr();

class test

void usagescopedptr()

注意:最後一行**報錯,因為我試圖轉移scoped_ptr

3,scoped_array

彌補了標準庫中,沒有指向陣列的指標的遺憾

特點(1)建構函式必須是new,

(2)沒有過載*,->因為不是乙個普通的指標

(3)析構函式使用的是delete

(4)沒有begin,end

它和scoped_ptr區別就是它管理的是動態陣列,而不是單個動態物件

4,shared_ptr

boost完全開發指南的作者強調這個指標是最重要的,在過去現在未來都是,是乙個計數型智慧型指標,可以安全共享,

5,weak_ptr

shared_ptr的助手,不共享指標,不操作資源,弱指標

6,intrusive_ptr

因為shared_ptr指標能完成百分之九十九的工作了,所以不推薦使用intrusive_ptr指標

pool記憶體池庫

#include

容易使用,但是只能操作簡單資料型別,如int,double等

object_pool,解決了這個問題。還有singleton_pool,pool_alloc,,,

#include

#include

#include

using namespace std;

void usagescopedptr();

void usageautoptr();

void usagescopedarray();

void usagepool();

class test

void usagescopedptr()

void usagescopedarray()

void usagepool()

智慧型指標最好用的是shared_ptr,記憶體池最好用的是object_pool,當然具體情況具體分析

BOOST記憶體管理 intrusive ptr

參考鏈結 intrusive ptr 是shared ptr的插入式版本。與shared ptr指標不同的地方就在於它不直接管理引用計數,而是呼叫一下函式來間接管理 void intrusive ptr add ref t p void intrusive ptr release t p 有時我們必...

boost記憶體管理機制

boost主要是通過六種智慧型指標來管理記憶體的 scoped ptr scoped array shared ptr shared array weak ptr intrusive ptr。他們都是輕量級的物件,速度與原始指標相差無幾,對於所指的型別t也僅有乙個很小且很合理的要求 型別t的析構函式...

C學習筆記 記憶體管理

乙個c語言變數的作用域可以是 塊 作用域,函式作用域或者檔案作用域 塊是 之間的一段 同乙個 塊不可以有重名變數 auto自動變數 一般情況下 塊內部定義的變數都是自動變數 也可以顯示的使用aotu關鍵字 auto int i register暫存器變數 通常變數在記憶體當中,如果能把變數放到cpu...