std::weak_ptr小结

1 概念

std::weak_ptr是 C++ 标准库中的一种智能指针,它是为了配合std::shared_ptr而存在的,用于解决循环引用导致的内存泄漏问题。std::weak_ptr不拥有它所指向的对象的所有权,它只是对std::shared_ptr管理的对象的一种弱引用。当最后一个std::shared_ptr被销毁时,对象将被释放,即使有std::weak_ptr指向该对象。

2 使用方法

(一)包含头文件

#include <memory>

(二)创建 std::weak_ptr 对象

  1. 通常通过一个已有的std::shared_ptr来创建std::weak_ptr
   std::shared_ptr<int> sp(new int(42));
   std::weak_ptr<int> wp(sp);

(三)检查所指向的对象是否仍然存在

可以使用std::weak_ptrexpired()方法来检查它所指向的对象是否已经被释放。如果返回true,则表示对象已被释放;如果返回false,则对象仍然存在。

   if (wp.expired()) {
       std::cout << "Object no longer exists." << std::endl;
   } else {
       std::cout << "Object still exists." << std::endl;
   }

(四)获取指向的对象(如果存在)

可以使用std::weak_ptrlock()方法来尝试获取一个指向对象的std::shared_ptr。如果对象仍然存在,lock()将返回一个有效的std::shared_ptr;如果对象已被释放,lock()将返回一个空的std::shared_ptr

   std::shared_ptr<int> sp2 = wp.lock();
   if (sp2) {
       std::cout << "*sp2: " << *sp2 << std::endl;
   } else {
       std::cout << "Could not obtain shared_ptr." << std::endl;
   }

std::weak_ptr在避免循环引用和需要弱引用对象的场景中非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青草地溪水旁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值