一、概念
weak_ptr是一種不控制所指向對象生存期的智能指針,它指向一個shared_ptr管理的對象
擁有“弱”共享的特點
最重要的特點
一個對象被多個shared_ptr類所指向時,就會擁有多個引用計數
但是當weak_ptr指向一個shared_ptr類所指向的對象時,該對象的引用計數不會增加
因此,當最后一個對象的最后一個shared_ptr類被釋放時,該對象會被釋放。即使此時仍有weak_ptr指向該對象,該對象的內存仍然會被釋放
二、weak_ptr類的基本使用
我們需要用一個shared_ptr類來初始化weak_ptr類
也與wp無關
auto p=make_shared<int>(42); //初始化一個shared_ptr對象weak_ptr<int> wp(p); //用p初始化wp,wp弱共享p//wp只是指向p所指的對象,p的引用計數沒有改變,并且p所指對象的釋放
四、lock函數的使用
用來檢測weak_ptr所指的對象是否仍然存在,如果存在就繼續訪問,不存在則做相應的處理
返回值:
如果weak_ptr所指的shared_pre引用計數為0,返回一個空的shared_ptr
否則,返回一個shared_ptr對象
auto p=make_shared<int>(42);weak_ptr<int> wp(p);if(shared_ptr<int> np=wp.lock()){...//如果np不為空則執行if}else{ }