使用的智慧型指標的坑

2021-10-07 23:10:35 字數 1901 閱讀 2325

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