C++如何使用智能指针shared_ptr_C++共享所有权的内存管理


shared_ptr通过引用计数实现共享所有权,自动管理内存;推荐使用make_shared创建,避免循环引用时改用weak_ptr,并可自定义删除器处理特殊资源,提升安全性与性能。

c++如何使用智能指针shared_ptr_c++共享所有权的内存管理

在C++中,shared_ptr 是一种智能指针,用于实现共享所有权的动态内存管理。它通过引用计数机制自动追踪有多少个 shared_ptr 实例指向同一块堆内存,当最后一个指向该内存的 shared_ptr 被销毁或重置时,内存会自动释放,避免了内存泄漏。

创建 shared_ptr

可以使用 std::make_shared 或直接构造 shared_ptr 来创建对象:

  • std::make_shared<t>(args)</t> 是推荐方式,它更高效且异常安全。
  • 也可以用原始指针构造,但不建议直接传裸指针,容易出错。

示例:
auto ptr1 = std::make_shared(42);
std::shared_ptr ptr2(new int(10)); // 不推荐,但可用

共享所有权与引用计数

多个 shared_ptr 可以指向同一个对象,每增加一个副本,引用计数加1;销毁一个则减1。

  • 使用 use_count() 查看当前引用数量(调试用)。
  • 当引用计数变为0时,所管理的对象自动被析构。

示例:
auto a = std::make_shared<:string>("hello");
auto b = a; // 引用计数变为2
auto c = a; // 变为3
b.reset(); // b 置空,计数减为2

避免循环引用

当两个对象通过 shared_ptr 相互持有对方时,引用计数无法归零,导致内存泄漏。

Motiff Motiff

Motiff是由猿辅导旗下的一款界面设计工具,定位为“AI时代设计工具”

Motiff 126 查看详情 Motiff
  • 解决方法:在一方使用 std::weak_ptr,它不增加引用计数。
  • weak_ptr 可用于临时访问对象,检查是否还存在。

示例:
struct Node {
  std::shared_ptr parent;
  std::weak_ptr child; // 避免循环
};

自定义删除器

有时需要特殊方式释放资源(如关闭文件、释放数组等),可为 shared_ptr 指定删除器:

  • 删除器是一个函数或可调用对象,在引用计数为0时被调用。
  • 适用于数组、C风格资源(如 FILE*)等场景。

示例:
auto deleter = [](int* p) { delete[] p; };
std::shared_ptr arr(new int[10], deleter);

基本上就这些。合理使用 shared_ptr 能显著提升代码安全性,减少手动管理内存的错误。注意避免循环引用,并优先使用 make_shared 提高性能。

以上就是C++如何使用智能指针shared_ptr_C++共享所有权的内存管理的详细内容,更多请关注其它相关文章!


# 多个  # 阿克苏地区医院网站建设  # 荔湾区网站优化费用多少  # 十堰全屏营销推广  # 湖北网站优化公司策略分析  # 昆山网站优化排名靠谱  # seo网站成功案例  # 广州网站建设粤icp  # 盐田区网站优化推荐电话  # 荔湾区优化网站报价公示  # 大连seo代运营  # 是由  # node  # 是一种  # 与其他  # 是一个  # 数据结构  # 自定义  # 内存管理  # 如何使用  # red  # 解决方法  # c++ 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 荣耀magicv5怎么上手测评  Apple Music无故扣费引质疑  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  《全民k歌》网页版最新登录入口一览  蛙漫2(台版)正版官网 2025免费网页版分享  微信步数怎么刷_微信步数快速提升技巧  Python项目中的条件导入:解决跨模块依赖问题  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  《鹿路通》退余额方法  Retrofit根路径POST请求:@POST("/") 的应用与解析  实现可重用自定义Python Range类  VS Code中的Tailwind CSS IntelliSense插件使用技巧  小红书网页版首页入口 小红书网页版电脑端官方登录链接  如何配置VS Code作为您Git操作的默认编辑器  济南公交卡手机充值指南  更换小红书群背景怎么换?小红书群规则怎么设置?  苹果电脑如何快速查看电池状态 苹果电脑电池信息快捷方法  HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  如何在Podman容器中运行Composer_Docker替代品Podman的PHP与Composer容器化实践  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  优酷官网登录入口电脑版 优酷官网网址入口  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  风车动漫官网首页入口登录 风车动漫在线观看正版地址  todesk如何添加信任设备_todesk信任设备设置教程  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  《植物大战僵尸3》火龙草作用介绍  4399小游戏下装链接 4399小游戏下载链接入口  顺丰官方查单号入口 顺丰快递单号查询官网入口  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  抖音网页版地址直接进入_抖音网页版在线观看入口  Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  重返未来:1999卡戎全方位攻略  小红书如何引流到私信?引流到私信有用吗?  有道AI翻译入口 智能写作官方网站入口  Win10怎么设置快速启动 Win10开启快速启动设置方法  byrutor直接访问入口 byrutor官方游戏库  AO3中文版手机快速通道_AO3最新稳定链接更新  如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  曝《丝之歌》DLC有望开发!开发商还有神秘新企划  怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  视频号视频怎么提取文案?提取的文案如何优化与使用? 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.