c 標準庫智慧型指標 weak ptr

2021-10-17 12:42:50 字數 1711 閱讀 9104

1、weak_ptr的存在是為了協助share_ptr的,weak_ptr指向share_ptr管理的物件。

2、weak_ptr指向share_ptr管理的物件不會改變share_ptr的引用計數。

3、weak_ptr的 use_count() 返回的是指向的share_ptr的引用計數。

4、weak_ptr不具有普通指標的行為,沒有過載operator*->

5、expired() 獲取指向的share_ptr的引用計數為是否為0。

6、lock():

這可以用來檢測對應share_ptr指向的物件是不是存在。

7、share_ptr進行 reset() 會使weak_ptr指向的內容清空:

8、使用場景。由於share_ptr是很完善的職能指標,weak_ptr的唯一合理的使用場景就是在share_ptr會形成迴圈引用的地方使用weak_ptr代替share_ptr

class a;

class b

;class a

;int main(int argc, char *ar**)

上面的**形成了迴圈引用。

有兩個share_ptr指標指向 new a()申請的記憶體,兩個share_ptr指標指向 new b()申請的記憶體。

當執行完主函式時,清除智慧型指標 std::shared_ptrb,但是原先b指向的記憶體還有乙個a->b_ptr在指著,引用計數 == 1,所以該記憶體不會被刪除。

a也同理,刪除a時,由於原先b指向的記憶體無法刪除,所以始終有個a_ptr指著a的記憶體,導致a指向的記憶體引用計數不為0。

解決辦法是其中一方改用weak_ptr

C 智慧型指標 weak ptr

weak ptr 是一種不控制物件生命週期的智慧型指標,它指向乙個 shared ptr 管理的物件.進行該物件的記憶體管理的是那個強引用的 shared ptr.weak ptr只是提供了對管理物件的乙個訪問手段.weak 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...