智慧型指標share ptr記錄

2022-07-19 09:00:22 字數 2414 閱讀 7161

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