智慧型指標之weak ptr

2022-08-30 13:45:21 字數 723 閱讀 1301

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

由於物件可能不存在,我們不能用weak_ptr直接訪問物件,而必須呼叫lock。這個函式檢查weak_ptr指向的物件是否仍存在。例如:

if (shared_ptrnp = np.lock())
常用操作

用法說明

weak_ptr< t > w

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

weak_ptr< t > w(sp)

與shared_ptr sp指向相同物件的weak_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()

如果w.expired()為true,返回乙個空shared_ptr,否則返回其繫結的shared_ptr

智慧型指標weak ptr

智慧型指標weak ptr主要用來協助shared ptr。不參與引用計數,但是有以下好處 1 打破遞迴的依賴關係 2 使用乙個共享的資源但是不要所有權,不新增引用計數 3 避免懸空指標。使用方法有二 方法一 boost shared ptrsp new std string method1 從sh...

智慧型指標 weak ptr

weak ptr是為了配合shared ptr而引入的一種智慧型指標,它更像是shared ptr的乙個助手而不是智慧型指標,因為它不具有普通指標的行為,沒有過載operator 和 它的最大作用在於協助shared ptr工作,像旁觀者那樣觀測資源的使用情況.用法 weak ptr被設計為與sha...

智慧型指標 weak ptr

weak ptr weak ptr是為了配合shared ptr而引入的一種智慧型指標,它更像是shared ptr的乙個助手而不是智慧型指標,因為它不具有普通指標的行為,沒有過載operator 和 它的最大作用在於協助shared ptr工作,像旁觀者那樣觀測資源的使用情況.用法 weak pt...