shared_ptr 是乙個共享所有權的智慧型指標,允許多個指標指向同乙個物件。shared_ptr 物件除了包括乙個物件的指標,還包括乙個引用計數器。當每給物件分配乙個share_ptr的時候,引用計數加一;每reset乙個share_ptr, 或者修改物件的指向(指向其他物件或者賦值nullptr),或者區域性share_ptr離開作用域,引用計數減一,當引用計數為0的時候,自動釋放自己所管理的物件。
構造:struct c ;
std::shared_ptrp1;輸出引用計數:std::shared_ptr
p2 (nullptr);
std::shared_ptr
p3 (new
int);
std::shared_ptr
p4 (new
int, std::default_delete());
std::shared_ptr
p5 (new
int, (int* p), std::allocator());
std::shared_ptr
p6 (p5);
std::shared_ptr
p7 (std::move(p6));
std::shared_ptr
p8 (std::unique_ptr(new
int));
std::shared_ptr
obj (new
c); std::shared_ptr
p9 (obj, obj->data);
拷貝和轉移:
std::shared_ptrfoo;輸出:std::shared_ptr
bar(new
int(10
));foo = bar; //
copy
bar = std::make_shared(20); //
move
std::unique_ptr unique(new
int(30
));foo = std::move(unique); //
move from unique_ptr
std::cout << "
*foo:
"<< *foo << '\n'
;std::cout
<< "
*bar:
"<< *bar << '
\n';
交換控制權:
std::shared_ptr foo(new輸出:int(10
));std::shared_ptr
bar(new
int(20
));foo.swap(bar);
std::cout
<< "
*foo:
"<< *foo << '\n'
;std::cout
<< "
*bar:
"<< *bar << '
\n';
重置:
std::shared_ptrsp;輸出:sp.reset(
newint
);*sp = 10
;std::cout
<< *sp << '\n'
;sp.reset(
newint
);*sp = 20
;std::cout
<< *sp << '\n'
;sp.reset();
判斷是否是唯一的share_ptr
std::shared_ptrfoo;輸出:std::shared_ptr
bar(new
int);
std::cout
<< "
1: "
<< foo.unique() << '
\n'; //
false (empty)
foo =bar;
std::cout
<< "
2: "
<< foo.unique() << '
\n'; //
false (shared with bar)
bar =nullptr;
std::cout
<< "
3: "
<< foo.unique() << '
\n'; //
true
智慧型指標share ptr 簡單剖析
本文 話不多說直接上碼!shared ptr的簡單實現版本 基於引用記數的智慧型指標 namespace boost 空間庫boost templateshared ptr y py shared ptr constshared ptr r px r.px templateshared ptr co...
共享智慧型指標 SharePtr 的C 實現
主要實現思想是引用計數法,在shareptr類拷貝 copy 和賦值 的時候引用計數加1,而在shareptr類變數析構的時候引用計數減少1 1 shareptr包裹類變數指標和引用計數指標int 這裡引用計數採用 int 為了在各個shareptr變數實現計數共享,每個變數的計數變化都會影響其他計...
C 智慧型指標個人記錄
shared ptr允許多個指標指向同乙個物件,unique ptr則 獨佔 所指向的物件。標準庫還定義了一種名為weak ptr的伴隨類,它是一種弱引用,指向shared ptr所管理的物件,這三種智慧型指標都定義在memory標頭檔案中。不可以用shared ptr或者weak ptr指向乙個u...