天天看點

C++(STL):04---智能指針之weak_ptr

一、概念

  • weak_ptr是一種不控制所指向對象生存期的智能指針,它指向一個shared_ptr管理的對象
  • 擁有“弱”共享的特點

最重要的特點

  • 一個對象被多個shared_ptr類所指向時,就會擁有多個引用計數
  • 但是當weak_ptr指向一個shared_ptr類所指向的對象時,該對象的引用計數不會增加
  • 是以,當最後一個對象的最後一個shared_ptr類被釋放時,該對象會被釋放。即使此時仍有weak_ptr指向該對象,該對象的記憶體仍然會被釋放

二、weak_ptr類的基本使用

  • 我們需要用一個shared_ptr類來初始化weak_ptr類
  1. 也與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{
  
}