首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】智能指针:weak_ptr

一、产生原因 weak_ptr的产生,主要是为了配合shared_ptr的使用,对于shared_ptr来说,有一种循环引用会导致shared_ptr的引用计数一直不能变为0,如此以来导致内存一直不能释放的掉...Program ended with exit code: 0 除此之外,weak_ptr也具有弱引用特性,不拥有对象,只有延迟到尝试调用Lock()时才会有可能临时拥有对象: 只是持有一个没有拥有权的被...二、特性 weak_ptr的特性如下所示: 1.不具有普通指针的行为,没有重载operator*和->。 2.它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。...3.weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。 4.weak_ptr没有共享资源,它的构造不会引起指针引用计数的增加。...weak_ptr的使用特点: 1.使用weak_ptr的成员函数use_count()可以观测资源的引用计数, 另一个成员函数expired()的功能等价于use_count()==0, 但更快,表示被观测的资源

99110

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类 auto p=make_shared...四、lock函数的使用 用来检测weak_ptr所指的对象是否仍然存在,如果存在就继续访问,不存在则做相应的处理 返回值: 如果weak_ptr所指的shared_pre引用计数为0,返回一个空的shared_ptr...否则,返回一个shared_ptr对象 auto p=make_shared(42); weak_ptr wp(p); if(shared_ptr np=wp.lock(

50220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于C++,手把手教你实现智能指针管理功能

    这里你仍然有个疑问,weak_ptr不能用普通的pointer替代,回答这个问题前,我们来挖掘看看weak_ptr到底还有其他的收益吗 以下这个例子显示了3个shared指针sp1,sp2和sp3拥有了一块对象...\n"; } 2.2 weak_ptr weak_ptr不能使用operator*和operator->,而且也没有get()函数。weak_ptr一般和shared_ptr配套使用。...2.2.1 weak_ptr的初始化和赋值 weak_ptr默认是空的,不指到任何对象。它可以接受shared_ptr或者另一个weak_ptr的赋值。...\n"; } 2.2.2 使用weak_ptr weak_ptr不能直接访问对象,只能先用lock()函数获取到shared_ptr,lock()函数会检验对象是否还存在。...weak_ptr默认是空的,不指像任何对象。它可以接受shared_ptr或者另一个weak_ptr的赋值。

    31300

    详解C++11智能指针

    weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象....weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少...如果把其中一个改为weak_ptr就可以了,我们把类A里面的shared_ptr pb_,改为weak_ptr pb_ ,运行结果如下: 1 1 1 2 B delete A delete 这样的话,资源...注意:我们不能通过weak_ptr直接访问对象的方法,比如B对象中有一个方法print(),我们不能这样访问,pa->pb_->print(),因为pb_是一个weak_ptr,应该先把它转化为shared_ptr...共享的对象的引用计数. reset 将 weak_ptr 置空. weak_ptr 支持拷贝或赋值, 但不会影响对应的 shared_ptr 内部对象的计数. share_ptr和weak_ptr的核心实现

    1.6K50

    【重学C++】02 脱离指针陷阱:深入浅出 C++ 智能指针

    为了避免循环引用,可以将其中一个指针改为 weak_ptr 类型。weak_ptr也是一种智能指针,通常配合shared_ptr一起使用。...weak_ptr是一种弱引用,不对所指向的对象进行计数引用,也就是说,不增加所指对象的引用计数。...当所有的shared_ptr都析构了,不再指向该资源时,该资源会被销毁,同时对应的所有weak_ptr都会变成nullptr,这时我们就可以利用expired()方法来判断这个weak_ptr是否已经失效...我们可以通过weak_ptr的lock()方法来获得一个指向共享对象的shared_ptr。如果weak_ptr已经失效,lock()方法将返回一个空的shared_ptr。...:make_shared(42); // 创建shared_ptr对应的weak_ptr指针 std::weak_ptr wp(sp);// 通过lock创建一个对应的shared_ptr

    40200

    C++语言基础篇

    可以通过成员函数 use_count() 来查看资源的所有者个数,除了可以通过 new 来构造,还可以通过传⼊auto_ptr, unique_ptr,weak_ptr 来构造。...4、weak_ptr(弱引⽤) weak_ptr 是⼀种不控制对象⽣命周期的智能指针,它指向⼀个 shared_ptr 管理的对象。进⾏该对象的内存管理 的是那个强引⽤的 shared_ptr。...weak_ptr 只是提供了对管理对象的⼀个访问⼿段。...weak_ptr 设计的⽬的是为配合 shared_ptr ⽽引⼊的⼀种智 能指针来协助 shared_ptr ⼯作,它只可以从⼀个 shared_ptr 或另⼀个 weak_ptr 对象构造,,它的构造和析构不会...weak_ptr 是⽤来解决 shared_ptr 相互引⽤时的死锁问题,如果说两个 shared_ptr 相互引⽤,那么这两个指针的 引⽤计数永远不可能下降为0,也就是资源永远不会释放。

    53430
    领券