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...