void
notice()
void notice
enable_shared_from_this 類和虛函式一樣,某些情況不能使用
shared_from_this()不能在構造析構中呼叫
);//new會構造2次影響效率 new 1次,智慧型指標1次
object obj4 = obj3;
//非原子的,至少是類,引用加1,在多執行緒下需要額外的操作
object obj5 = make_shared()
;//只new一次
原因 在weak_ptr 失效記憶體才會釋放
celero是c++用來測試程式效能與執行效率的乙個測試庫, 通過celero可以方便的測試我們程式的效能需要
使用需要安裝編譯這個庫
#include
#include
#include
#include
#include
#include
"celero/celero.h"
using ptr = std::shared_ptr<
int>
;using weakptr = std::weak_ptr<
int>
;static std::vector<
int> origin;
static std::vector group;
static std::vector group2;
static std::vector<
int*
> group3;
static std::vector<
double
> bi**alues;
intmain
(int argc,
char
**arv)
std::cout << group.
size()
<<
" "<< group2.
size()
<< std::endl;
celero::
run(argc, arv)
;return0;
}baseline
(ptr, baseline,
600,3)
bi**alues.
push_back
(value);}
benchmark
(ptr, ptr,
600,3)
} bi**alues.
push_back
(value);}
benchmark
(ptr, sharedptr,
600,3)
} bi**alues.
push_back
(value);}
benchmark
(ptr, weakptr,
600,3)
} bi**alues.
push_back
(value)
;}
執行結果
在大量for 迴圈中盡量不使用weakptr指標效率過低
指標(4)智慧型指標的使用
why shared ptr 1 如果指標作為類成員時,使用shared ptr封裝原始指標,解決了複製類物件出現的問題 相較原始指標 如果是非記憶體資源 比如 互斥器 可以在構造時再傳乙個刪除器 deleter 引數 shared ptr可以,auto ptr不能 因為shared ptr預設行為...
C 智慧型指標的使用
測試環境 win7,vs2012 如果未安裝boost,請參考 涉及智慧型指標 shared ptr,weak ptr,scoped ptr,auto ptr 其它 enable shared from this 總呼叫函式 testsmartpointer 可以將其放在main 中執行。解釋在 中...
C 智慧型指標的使用
c 11中提供了三種智慧型指標 unique ptr shared ptr weak ptr 來自動 堆分配的物件。unique ptr如它的名字所傳達的意思,其所指向的記憶體區不能與unique ptr定義的另乙個指標共享。看 比較容易理解。include include using namesp...