从名字上看,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指针的个数,weak_ptr会保持控制块的生命周期,因此有一种特殊情况是:强引用的引用计数已经降为0,没有shared_ptr再持有基础对象,然而由于仍有weak_ptr指向基础对象,弱引用的引用计数非0,原本因为强引用计数已经归0就可以释放的基础对象内存,现在变成了“强引用...
weak_ptr配合shared_ptr,解决循环引用的问题。 2. shared_ptr 2.1 shared_ptr 介绍 shared_ptr 内部包含两个指针,一个指向对象,另一个指向控制块(control block),控制块中包含一个引用计数(reference count), 一个弱计数(weak count)和其它一些数据。 简单来说,shared_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 是为了配合shared_ptr而引入的一种智能指针,没有重载operator*和->,它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。 weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。但weak_ptr没有共享资源,它的构造不会引起指针引用计数的增加。
在C++ 中,智能指针是一种用于管理动态内存分配和释放的工具,它可以帮助我们避免内存泄漏和悬空指针的问题。C++11 引入了三种智能指针:shared_ptr、unique_ptr 和 weak_ptr。每种智能指针都有其特定的用法和适用场景。 的实现原理 是一种智能指针,允许多个 shared_ptr 实例共享同一个对象的所有权。它使用引用计数的...
深入理解C++智能指针之shared_ptr、weak_ptr:为什么从this直接构造共享指针会出错?CRTP的实际使用!严实的小何老师 立即播放 打开App,流畅又高清100+个相关视频 更多 2778 5 19:24 App 深入理解C++智能指针之unique_ptr——传说中的只移型别(move-only type) 1393 4 18:46 App 【C++】你真的会函数重载吗?
共有四种智能指针: std::auto_ptr、std::unique_ptr、std::shared_ptr、std::weak_ptr。 2.1 std::auto_ptr C++98中对智能指针进行标准化的尝试(问题:std::auto_ptr对象进行复制操作时会将其置空,不能在容器中存储std::au...
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_...
weak_ptr相比之下,weak_ptr更加简单,它不直接控制对象,仅作为shared_ptr的弱引用。使用weak_ptr时,它不会改变shared_ptr的引用计数。weak_ptr的典型操作有reset()、use_count()、expired()和lock(),它们在弱引用管理上各有特色。应用示例weak_ptr有助于避免循环引用导致的内存问题,以及在缓存和...