首页
学习
活动
专区
工具
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, 但更快,表示被观测的资源

1K10

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(

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

    基于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的赋值。

    45600

    掌握C++中智能指针的综合指南:深入现代内存管理

    ,这个weak_ptr用来观察this智能指针,调用shared_from_this()方法是,会调用内部这个weak_ptr的lock()方法,将所观察的shared_ptr返回。...4.3、weak_ptr解决循环引用问题在shared_ptr提到智能指针循环引用的问题,因为智能指针的循环引用会导致内存泄漏,可以通过weak_ptr解决该问题,只要将A或B的任意一个成员变量改为weak_ptr...4.4、weak_ptr使用注意事项weak_ptr在使用前需要检查合法性。...直到最后一个weak_ptr对象被析构,这块“堆”存储块才能被回收。否则weak_ptr无法指到自己所容纳的那个指针资源的当前状态。...weak_ptr要和shared_ptr搭配使用,不能单独使用weak_ptrweak_ptr的lock()使用是要先调用lock()再调用expired()。

    11800

    详解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
    领券