一、概念
- 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{
}