新闻中心
C++如何使用std::shared_ptr处理共享对象?(引用计数)
std::shared_ptr通过引用计数实现共享对象的自动内存管理,推荐用make_shared构造、weak_ptr打破循环引用、自定义删除器管理非默认资源。

用 std::shared_ptr 管理共享对象,核心是让多个指针安全地指向同一块堆内存,并在最后一个指针销毁时自动释放资源——靠的就是内部的引用计数。
创建 shared_ptr 并观察引用计数
不能直接用裸指针构造 shared_p(除非明确需要),推荐用
trstd::make_shared,它更高效且异常安全:
-
auto p1 = std::make_shared<int>(42);</int>—— 引用计数初始为 1 -
auto p2 = p1;—— 复制后,引用计数变为 2;p1和p2指向同一对象 std::cout 输出 <strong>2</strong>;<code>p2.use_count()同样是 2
共享但不增加引用计数?用 weak_ptr 观察
如果只想“观察”共享对象,又不想影响生命周期,用 std::weak_ptr:
-
std::weak_ptr<int> wp = p1;</int>——wp.use_count()仍是 2,wp.expired()返回 false -
p1.reset(); p2.reset();后,对象被释放,wp.expired()变为 true - 要用时调用
wp.lock()获取临时shared_ptr,若已过期则返回空指针
小心循环引用:shared_ptr 之间互相持有
两个对象用 shared_ptr 互相保存对方,会导致引用计数永远 >0,内存泄漏:
- 例如 A 里有
std::shared_ptr<b> b_ptr;</b>,B 里有std::shared_ptr<a> a_ptr;</a> -
解决方法:一方改用
std::weak_ptr(比如 B 中用weak_ptr<a></a>) - 访问前检查:
if (auto locked_a = a_ptr.lock()) { /* 安全使用 *locked_a */ }
自定义删除器与非默认资源管理
当管理的不是普通 new 出来的对象(比如 C 风格资源、数组、或需特殊清理逻辑),可以传入删除器:
auto ptr = std::shared_ptr<int>(new int(10), [](int* p) { delete p; });</int>- 管理数组:
std::shared_ptr<int> arr(new int[10], std::default_delete<int>{});</int></int> - 管理 FILE*:
std::shared_ptr<file>(fopen("a.txt", "r"), [](FILE* f) { if(f) fclose(f); });</file>
基本上就这些。引用计数是透明的,你只需专注“谁在用”,shared_ptr 自己会算账。关键点就三个:用 make_shared 构造、用 weak_ptr 打破循环、按需定制删除器。
以上就是C++如何使用std::shared_ptr处理共享对象?(引用计数)的详细内容,更多请关注其它相关文章!
# 仍是
# ecshop seo视频教程
# 深圳快速seo企业
# 微信怎么做内容营销推广
# 搜狗关键词排名多少 s
# 泉州seo做到首页服务
# 网站优化后期工作流程图
# 南山网络seo优化公司
# 大庆抖音seo团队推荐
# 智能网站建设商家
# 卖袜子怎么做营销推广
# c++
# 中文网
# 相关文章
# 并在
# 只需
# 多个
# 动态分配
# 自定义
# 如何使用
# red
# 解决方法
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
解决Flask中Quill编辑器内容提交失败及TypeError的指南
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
c++ 获取系统当前时间 c++时间戳获取方法
优化Django表单:提交验证失败后保留用户输入
如何在CSS中使用浮动制作导航栏_float实现水平菜单
黑猫投诉统一入口官网 消费者权益保护投诉平台
AO3同人作品网入口 AO3搜索引擎官网永久地址
如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率
VS Code远程开发时如何处理文件权限问题
必由学官网快捷入口 必由学网页版在线学习平台
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
AO3最新入口2025公告_AO3中文官网合集
Go语言JSON解析深度指南:动态访问与结构体映射实践
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
深入理解J*a链表中的IPosition接口与使用
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
PySpark中从现有列右侧提取可变长度字符创建新列的教程
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
微信网页版官方入口直达 微信网页版网页版登录使用方法
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
零跑汽车11月交付量达70327台 实现连续9个月正增长
Win10双系统截图高效法 截屏快捷键速记【技巧】
mcjs网页版在线存档 mcjs云存档登录入口
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
知音漫客正版漫画平台_知音漫客官网账号登录
Pyrogram与g4f集成:异步编程实践与常见错误解决
qq游戏网页版直接玩_qq游戏免下载快速入口
Lar*el DB::listen 事件中的查询执行时间单位解析
Tabulator表格中精确实现日期时间排序的指南
cad如何更改注释性对象的比例_cad注释性比例调整方法
AO3官方镜像站点汇总 AO3同人作品网页版直达链接
AO3官方在线访问地址 Archive of Our Own最新镜像合集
提升Kafka消费者健壮性:会话超时处理与消息处理语义
哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法
小红书网页版入口链接分享 小红书官网直接进
Pandas DataFrame 多条件优先级排序与排名
J*a 递归快速排序中静态变量的状态管理与陷阱
steam官方网页快速访问 steam账号注册全流程
必由学官方登录入口 必由学教师学生账号快速访问
汽水音乐在线版入口_汽水音乐网页播放手册
MAC的“快捷指令”怎么同步到iPhone_MAC利用iCloud同步所有设备的自动化指令
Python:递归比较文件夹内容并找出特定类型文件的差异
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
《噬血代码2》新预告片发布 展示游戏剧情
内存疯狂猛猛涨价:主板销量直接腰斩!
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合


2025-12-15
浏览次数:次
返回列表