从名字上看,weak_ptr是弱指针,即它比shared_ptr要弱一点。weak_ptr可以看做shared_ptr的助手,weak_ptr要和shared_ptr配套一起使用。当创建一个weak_ptr时,要用一个shared_ptr来初始化它。 我们知道,复制shared_ptr是会增加内部数据的引用计数,但是复制weak_ptr时,以及由shared_ptr构造weak_ptr时,是不会增加引...
weak_ptr指向对象并不会对引用计数+1。weak_ptr不对其所指的对象进行内存资源的管理。解决循环引用的方法就是将shared_ptr的数据成员改为weak_ptr。 weak_ptr的用法: 当创建一个weak_ptr时,要用一个shared_ptr来初始化它: shared_ptr<int> p = make_shared<int>(111); weak_ptr wp(p); 因为是弱引用,...
weak_ptr指向对象并不会对引用计数+1。weak_ptr不对其所指的对象进行内存资源的管理。解决循环引用的方法就是将shared_ptr的数据成员改为weak_ptr。 weak_ptr的用法: 当创建一个weak_ptr时,要用一个shared_ptr来初始化它: shared_ptr<int> p = make_shared<int>(111); weak_ptr wp(p); 因为是弱引用,...
是为了配合 shared_ptr 而引入的一种智能指针,它指向由 shared_ptr 管理的对象,但不影响对象的生命周期。通过 weak_ptr,我们可以解决 shared_ptr 的循环引用问题,避免内存泄漏。 通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过 lock() 方法转换为 shared_ptr,如果转换成功,...
1.多态与CRTP 29:42 2.unique_ptr 19:24 3.shared_ptr与weak_ptr 36:28 4.std::move 与 值类型 20:13 5.std::forward,引用折叠,万能引用 26:01 6.函数重载专题 18:46 7.关于const 21:58 8.const reference延续临时变量l 07:07 9.成员函数const重载的本质 04:10 10.函数传参之左...
shared_ptr A被赋值给shared_ptr B时,A的引用计数加1;shared_ptr A被赋值给weak_ptr C时,A的引用计数不变。引用力度不够强,不足以改变引用计数,所以就弱了(个人理解,有误请指正)。 weak_ptr在使用时,是与shared_ptr绑定的。基于SharedPtr实现来实现demo版的WeakPtr,并解决循环引用的问题,全部代码如下: #...
shared_ptr的默认能力是管理动态内存,但支持自定义的Deleter以实现个性化的资源释放动作。 weak_ptr用于解决“引用计数”模型循环依赖问题,weak_ptr指向一个对象,并不增减该对象的引用计数器 4. shared_ptr的应用场景以及使用注意事项 4.1 对象之间“共享数据”,对象创建与销毁“分离” ...
如此来看,weak_ptr就显得相对简单。它是一种本身不控制指向对象生命周期的智能指针,它指向一个由shared_ptr管理的对象,但是不会改变shared_ptr的引用计数。 我们可以按照如下方法使用weak_ptr std::weak_ptr<A>A_weak_ptr(A_ptr); 内部typedef 一个typedef叫做element_type。
weak_ptr<BB>m_p;};classBB{public:std::string m_name;BB(){std::cout<<m_name<<"调用构造函数BB()。\n";}BB(conststd::string&name):m_name(name){std::cout<<"调用构造函数BB("<<m_name<<")。\n";}~BB(){std::cout<<"调用了析构函数~BB("<<m_name<<")。\n";}std::weak_...
C++17智能指针:shared_ptr与weak_ptr的简单概述C++17标准中的智能指针,如shared_ptr,主要用于管理和控制对象的生命周期,尤其在多所有者场景下。本文仅对其做基础介绍。shared_ptrshared_ptr是一种智能指针类型,它允许多个所有者共同维护对象的生存状态。使用shared_ptr时,可以通过添加删除器和分配器,...