shared_ptr<B> pb(new B()); pa->_pb = pb; pb->_pa = pa; return 0; } pa指针指向堆上对象后,A的引用计数是1,B的引用计数是1。 pa->_pb = pb;此时,B的引用计数是1。因为A的成员对象是weak_ptr。 pb->_pa = pa;此时,A的引用计数是2。 出作用域后: pb指针释放,B对象的引用计数减1
共享同一块内存std::shared_ptr<int>ptr2=ptr1;// 增加引用计数std::cout<<ptr1.use_count()<<std::endl;// 输出: 2// 通过弱引用指针weak_ptr解决
shared_ptr是智能指针的一种,相较于unique_ptr,引入了引用计数的概念,可以支持多个智能指针指向同一资源,由引用计数的增减来描述资源的共享或内存释放,引用计数降为0的时候,资源所占用的内存空间会被释放。 观察其源码结构,可以发现shared_ptr是一个模板派生类,_Ptr_base为它的基类。 Shared_ptr模板类分析 shared_...
其中有两个字段和shared_ptr如出一辙,分别是指向对象的指针element_type* __ptr_和 指向控制块的指针__shared_weak_count* __cntrl_其继承于__shared_count __ptr_ 这个字段就是指向原本指向的对象 __shared_weak_count 这个字段则指向控制块,其中引用计数的增减均在其中进行,笔者目前看到的,只有进行构造、复...
auto pm = std::shared_ptr<int>(new int(2)); auto pn = std::make_shared<int>(4); auto wp1 = std::weak_ptr<int>(pn); auto wp2 = std::weak_ptr<int>(wp1); std::weak_ptr<int> wp3; std::weak_ptr<int> wp4; wp3=pn; ...
shared_ptr、unique_ptr和weak_ptr是C++中智能指针的三种类型,它们用于管理动态分配的内存,避免内存泄漏和悬空指针的问题。 shared_ptr(共享指针): 概念:shared_ptr是一种引用计数智能指针,可以跟踪有多少个指针共享同一块内存资源。 优势:可以在多个地方共享同一块内存资源,当最后一个shared_ptr离开作用域时,...
如果客户类派生于enable_shared_from_this<客户类>,还需要对enable_shared_from_this<客户类>的weak_ptr类成员_Wptr初始化成当前shared_ptr的客户对象和计数对象,并保持当前的强引用计数不变,弱引用计数加1,就是使客户对象自身的weak_ptr被初始化成客户对象和客户的计数对象,相当于客户对象多了一个弱引用,还共享...
为了解决循环引用的问题,出现了弱引用的weak_ptr。weak_ptr指向对象并不会对引用计数+1。weak_ptr不对其所指的对象进行内存资源的管理。解决循环引用的方法就是将shared_ptr的数据成员改为weak_ptr。 weak_ptr的用法: 当创建一个weak_ptr时,要用一个shared_ptr来初始化它: ...
[modern c++] shared_ptr和weak_ptr shared_ptr shared_ptr是用来智能管理内存的,shared_ptr的 构造函数,拷贝构造,拷贝赋值 这三个动作都会导致 引用计数的增加,析构函数,移动拷贝,移动赋值 这三个动作都会导致 引用计数的减少。当引用计数为 0 时,指向的资源被释放,但是要记得自行把shared_ptr置空,它不...
weak_ptr的是一种不控制所指向对象生存期的智能指针,指向的shared_ptr管理的对象,但是不影响的shared_ptr的引用计数。它像的shared_ptr的助手,一旦最后一个的shared_ptr被销毁,对象就被释放,weak_ptr的不影响这个过程。 weak_ptr的的一些操作: weak_ptr<T> w(sp); //定义一个和shared_ptr sp指向相同对象的...