weak_ptr用于判断shared_ptr关联的资源是否已经被释放。weak_ptr不拥有这个资源,也无法阻止shared_ptr释放该资源,weak_ptr销毁时也不会销毁该资源,用法如下:
/*代码输出如下:
Simple 构造函数执行
资源未被释放
Simple 析构函数执行
资源已释放
*/
void useResource(weak_ptr<Simple>& weakSimple){
auto resource = weakSimple.lock(); // lock()方法返回一个shared_ptr
if (resource){
cout<<"资源未被释放"<<endl;
}else{
cout<<"资源已释放"<<endl;
}
}
int main(){
auto sharedSimple = make_shared<Simple>();
weak_ptr<Simple> weakSimple = sharedSimple;
// 使用weak_ptr
useResource(weakSimple);
//reset shared_ptr,会释放资源,即使weak_ptr还存在着
sharedSimple.reset();
// 再次使用weak_ptr
useResource(weakSimple);
}