C++ weak_ptr

  • weak_ptr指向一个shared_ptr指向的对象,且不会改变对象的引用计数。
  • weak_ptr不控制所指对象的生命周期。
  • if (a = x)只要x不为0,那么这个if就为真,比如下面的结果打印为 22
int main() {
    if (int a = 0) {
        std::cout << "===11===" << std::endl;
    }

    if (int a = 1) {
        std::cout << "===22===" << std::endl;
    }
}
  • weak_ptr的简单示例
  • 检查所指对象是否还活着

当a,b两个指针指向同一个对象object,当线程A删除了(delete )这个object, 而线程B通过b去访问同一个对象,这个时候称b指针为空悬指针,一般可以weak_ptr用来查看自己指向的(shared_ptr的对象)是否还可以使用。如果对象没有被delte,lock()会返回shared_ptr<int> 指针。如果对象被销毁了,会返回空指针。

​

#include <deque>
#include <iostream>
#include <mutex>
#include <thread>

int main() {
    std::weak_ptr<int> wp;
    std::cout << "======" << wp.lock() << std::endl;  // wp默认为空指针
    {
        std::shared_ptr<int> p = std::make_shared<int>(12);
        wp = p;                                      // weak_ptr指向一个shared_ptr
        if (std::shared_ptr<int> ptr = wp.lock()) {  // wp.lock()如果对象还存在,返回wp指向的shared_ptr
            std::cout << p.get() << "======" << wp.lock() << std::endl;
        }
    }
    std::cout << "======" << wp.lock() << std::endl;  // wp.lock()如果对象不存在,返回空指针
}

​
  •  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值