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...