从_M_release可以看出,智能指针所接管的指针的释放内存工作只和_M_use_count有关,当_M_use_count减完时就会将其释放了,而_M_weak_count也是有作用的,他负责释放_Sp_counted_base本身,这也就是为什么weak_ptr可以保证智能指针这个对象有效,但不保证智能指针所引用的指针有效的原因了(这点和shared_ptr、weak_ptr...
同时我们有了一个新的type叫做waek_ptr<T>用来表示对应元素的weak_ptr的类型 字段 其中有两个字段,分别是指向对象的指针element_type* __ptr_和 指向控制块的指针__shared_weak_count* __cntrl_其继承于__shared_count __ptr_ 这个字段就是指向原本指向的对象 __shared_weak_count 这个字段则指向控制块,其中...
既然weak_ptr无法直接使用资源,那他设计_M_ptr这个成员的意图在哪里呢?答案就是lock方法将weak_ptr转换为shared_ptr时是需要将这个指针传递过去的,不然连接管的指针都没了转换的意义也就没了 析构函数啥也没做,因为weak_ptr不持有资源,不对资源的释放产生影响,接下来对__weak_count进行分析4.2...
weak_ptr是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象。进行该对象的内存管理的是那个强引用的shared_ptr, weak_ptr只是提供了对管理对象的一个访问手段。 weak_ptr设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr或另一个 ...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
是为了配合 shared_ptr 而引入的一种智能指针,它指向由 shared_ptr 管理的对象,但不影响对象的生命周期。通过 weak_ptr,我们可以解决 shared_ptr 的循环引用问题,避免内存泄漏。 通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过 lock() 方法转换为 shared_ptr,如果转换成功...
\n";}std::weak_ptr<CC>m_p;};intmain(){std::shared_ptr<CC>pa=std::make_shared<CC>("西施a");{std::shared_ptr<BB>pb=std::make_shared<BB>("西施b");pa->m_p=pb;pb->m_p=pa;// 把weak_ptr提升为shared_ptr, 此为线程安全操作std::shared_ptr<BB>pp=pa->m_p.lock();if(...
“智能指针”指shared_ptr或weak_ptr “裸指针”指原始的C指针 裸指针还是智能指针通常是上下文自明的,此时直接用“指针”一词指代两者之一 首先,我们来看shared_ptr和weak_ptr持有了哪些数据。 对于shared_ptr和weak_ptr,都仅持有两个字段,指向对象地址的指针ptr,和指向计数器对象的指针rep。
C++智能指针 auto_ptr、shared_ptr、weak_ptr和unique_ptr,一、auto_ptrauto_ptr这是C++98标准下的智能指针,现在常常已经被C++标准的其他智能指针取代。它的缺点是在转移所有权后会使运行期不安全。C++11新标准,用unique_ptr来代替auto_ptr原有功能。auto_ptr<double>pd;
weak_ptr相比之下,weak_ptr更加简单,它不直接控制对象,仅作为shared_ptr的弱引用。使用weak_ptr时,它不会改变shared_ptr的引用计数。weak_ptr的典型操作有reset()、use_count()、expired()和lock(),它们在弱引用管理上各有特色。应用示例weak_ptr有助于避免循环引用导致的内存问题,以及在缓存和...