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 而引入的一種智慧型指標來...