weak_ptr和shared_ptr功能总结

本文详细介绍了C++中智能指针weak_ptr和shared_ptr的内部结构与工作原理,包括它们如何管理内存以及在引用计数上的协作。重点解析了_M_pi数据成员在两者中的作用,以及在析构过程中的引用计数逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构分析

weak_ptr和shared_ptr都包含一个_M_refcount数据成员,追溯其定义,内部包含一个_Sp_counted_base<_LP>* _M_pi。
在这里插入图片描述

shared_ptr

shared_ptr能够实现其功能依赖于对于多个shared_ptr只实例化一个_Sp_counted_base<_Lp>。当我们通过某一shared_ptr初始化另一shared_ptr时,其会执行如下两个步骤
1、this->_M_ptr = other->_M_ptr
2、this->_M_refcount._M_pi指向了other->_M_refcount._M_pi,并且将_M_use_count++,表示对一个实体的引用增加1个。

当shared_ptr析构时,执行如下步骤
1、this->_M_refcount._M_pi->_M_use_count 减1
2、如果this->_M_refcount._M_pi->_M_use_count归零,则析构this->_M_ptr所执行的内存空间。
3、如果this->_M_refcount._M_pi->_M_weak_count归零,则析构this->_M_refcount._M_pi的空间

weak_ptr

weak_ptr必须依靠shared_ptr才能进行构造,其构造过程如下:
1、weak->_M_ptr =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值