weak_ptr的用法

2 篇文章 0 订阅

weak_ptr是一种弱引用的smart pointer. 它指向由shared_ptr管理的对象。这里的weak是指weak_ptr仅仅是指向该对象,并不会增加引用计数。而且,无法通过weak_ptr来直接操作对象,只能通过lock()升级为share_ptr才可。感觉就是1条棉线,将weak_ptr与对象轻轻的绑定起来。
常用的操作有:

#include <iostream>
#include <memory>

struct Foo 
{
    Foo(int val = 0) : _val(val)
    {   

    }   

    int _val;
};

void observe(std::weak_ptr<Foo> f)
{
    if(auto p = f.lock())
    {   
    ┊   std::cout << "lock success: " << p->_val << std::endl;

    ┊   return;
    }   

    std::cout << "the shared_ptr has been released:" << std::endl;
}                                                                                                                                                                                                            

int main(int argc, char** argv)
{
    std::weak_ptr<Foo> wp; 

    {   
    ┊   auto sp = std::make_shared<Foo>(5);
    ┊   wp = sp; 
    ┊   std::cout << "weak ptr user count: " << wp.use_count() << std::endl;
    ┊   observe(wp);
    }   

    observe(wp);
    std::cout << "weak ptr user count: " << wp.use_count() << std::endl;

    return 0;
}

此外,weak_ptr还用于break 循环引用的问题。如cppreferance描述:
In addition, std::weak_ptr is used to break circular references of std::shared_ptr.
如《Linux服务器多线程编程》, owner持有指向child的shared_ptr,child持有指向owner的weak_ptr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值