智慧型指標 weak ptr

2021-07-11 14:07:32 字數 751 閱讀 9671

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

用法:weak_ptr被設計為與shared_ptr共同工作,可以從乙個shared_ptr或者另乙個weak_ptr物件構造,獲得資源的觀測權。但weak_ptr沒有共享資源,它的構造不會引起指標引用計數的增加。

使用weak_ptr的成員函式use_count()可以觀測資源的引用計數,另乙個成員函式expired()的功能等價於use_count()==0,但更快,表示被觀測的資源(也就是shared_ptr的管理的資源)已經不復存在。

weak_ptr可以使用乙個非常重要的成員函式lock()從被觀測的shared_ptr獲得乙個可用的shared_ptr物件, 從而操作資源。但當expired()==true的時候,lock()函式將返回乙個儲存空指標的shared_ptr.

例項:

shared_ptrsp(new int(10));

assert(sp.use_count() == 1);

weak_ptrwp(sp); //從shared_ptr建立weak_ptr

assert(wp.use_count() == 1);

if (!wp.expired())//判斷weak_ptr觀察的物件是否失效

智慧型指標weak ptr

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

智慧型指標 weak ptr

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

智慧型指標之weak ptr

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