C 11 智慧型指標 二 weak ptr

2021-10-10 13:03:00 字數 1252 閱讀 3815

weak_ptr是一種不控制所指向物件生存期的智慧型指標,它指向乙個由shared_ptr管理的物件。將乙個weak_ptr繫結到乙個shared_ptr不會改變它的引用計數。一旦最後乙個指向某個物件的shared_ptr被銷毀,物件就會被釋放,即使weak_ptr指向該物件,該物件也會被釋放。

weak_ptr的操作操作

說明weak_ptr<t> w

空weak_ptr可以指向型別為t的物件

weak_ptr<t> w(sp)

與shared_ptr。t必須能轉換為sp指向的型別

w = p

p可以是乙個shared_ptr或乙個weak_ptr。賦值後w和p共享物件

w.reset()

將w置為空

w.use_count()

與w共享物件的shared_ptr的數量

w.expired()

若w.use_count()為0,返回true,否則返回false

w.lock()

如果expired為true,返回乙個空shared_ptr;否則返回乙個指向w的物件的shared_ptr

建立乙個weak_ptr時,需要用乙個shared_ptr來初始化:

auto p = make_shared<

int>(1

);weak_ptr<

int>

wp(p)

;//wp弱共享p;p的引用計數未改變

wp和p指向相同物件。由於wp是乙個弱引用,建立wp不會改變p的引用計數。由於wp指向的物件可能被釋放,不能直接用weak_ptr直接訪問物件,而必須呼叫lock檢查指向物件是否存在。如果存在,lock返回乙個指向共享物件的shared_ptr。只要此shared_ptr存在,它所指向的底層物件也一直存在,例如:

auto np = wp.

lock()

//檢查wp指向物件是否存在if(

!np)

else

C 11智慧型指標之weak ptr詳解

如題,我們今天要講的是 c 11 引入的三種智慧型指標中的 weak ptr。在學習 weak ptr 之前最好對 shared ptr 有所了解。如果你還不知道 shared ptr 是何物,可以看看另一篇文章 c 11新特性 c 11智慧型指標之shared ptr 1 為什麼需要weak pt...

C 11 weak ptr智慧型指標

和 shared ptr unique ptr 型別指標一樣,weak ptr 智慧型指標也是以模板類的方式實現的。weak ptr t 為指標所指資料的型別 定義在標頭檔案,並位於 std 命名空間中。因此,要想使用 weak ptr 型別指標,程式中應首先包含如下 2 條語句 include u...

C 智慧型指標 weak ptr

weak ptr 是一種不控制物件生命週期的智慧型指標,它指向乙個 shared ptr 管理的物件.進行該物件的記憶體管理的是那個強引用的 shared ptr.weak ptr只是提供了對管理物件的乙個訪問手段.weak ptr 設計的目的是為配合 shared ptr 而引入的一種智慧型指標來...