C++ shared_ptr用法_C++智能指针详解


shared_ptr通过引用计数管理动态内存,多个指针共享对象所有权,使用make_shared创建更安全,引用计数为0时自动释放内存,需用weak_ptr避免循环引用。

c++ shared_ptr用法_c++智能指针详解

在C++中,shared_ptr 是一种智能指针,用于管理动态分配的对象,确保对象在不再被使用时自动释放内存。它通过引用计数机制实现共享所有权,多个 shared_ptr 可以指向同一个对象,当最后一个指向该对象的 shared_ptr 被销毁或重置时,对象才会被自动删除。

1. shared_ptr 的基本用法

要使用 shared_ptr,需要包含头文件 memory

#include

创建一个 shared_ptr 的常见方式是使用 std::make_shared,这是推荐的做法,因为它更高效且异常安全:

std::shared_ptr ptr = std::make_shared(42);

也可以从原始指针构造(不推荐直接使用裸指针):

std::shared_ptr ptr2(new int(10)); // 不推荐,但合法

2. 引用计数与共享所有权

shared_ptr 内部维护一个引用计数,记录有多少个 shared_ptr 实例共享同一个对象。每次拷贝会增加计数,每次析构或赋值会减少计数。

查看当前引用计数的方法是调用 use_count()

auto p1 = std::make_shared(100);
auto p2 = p1; // 引用计数变为 2
std::cout

当引用计数降为 0 时,所管理的对象会被自动 delete。

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video

3. 避免循环引用

使用 shared_ptr 时需小心循环引用问题。例如两个对象互相持有对方的 shared_ptr,会导致引用计数永远不为 0,造成内存泄漏。

解决办法是使用 std::weak_ptr 打破循环。它是一个弱引用,不增加引用计数:

std::shared_ptr a = std::make_shared();
a->buddy = a; // buddy 是 weak_ptr

访问 weak_ptr 前需调用 lock() 获取临时的 shared_ptr

4. shared_ptr 的常用操作

shared_ptr 支持大多数指针操作:

  • *ptr:解引用,获取对象
  • ptr->func():调用成员函数
  • ptr.get():获取原始指针(慎用)
  • ptr.reset():释放所有权,可传新指针
  • ptr.use_count():返回引用计数(调试用)

基本上就这些。合理使用 shared_ptr 能有效避免内存泄漏,提升代码安全性。注意避免循环引用,优先使用 make_shared,不要混用裸指针和智能指针。不复杂但容易忽略细节。

以上就是C++ shared_ptr用法_C++智能指针详解的详细内容,更多请关注其它相关文章!


# 它是  # 卖特产怎么做网站推广呢  # 贴心的泉州seo价格  # 模拟点击网站优化  # 湛江网站推广说说工作  # 外贸营销推广公司常德  # 唐山网站推广代运营  # 城阳区网站优化服务热线  # 纳溪区推广营销招聘网站  # 南通网站建设源码在哪里  # 南昌电商seo哪个好点  # 相关文章  # c++智能指针  # 才会  # 是一种  # 这是  # 如何实现  # 如何解决  # 动态分配  # 多个  # AI-powered  # red  # c++ 


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


相关推荐: 跨语言测试实践:使用Python Selenium测试现有J*a Web项目  《新三国志曹操传》游历事件袁尚突围攻略  PHP utf8_encode 字符编码转换陷阱与解决方案  京东物流快递破损了怎么办_京东快递破损理赔流程  纯CSS实现滚动时动态时间轴线条颜色填充效果  抖音作品被限流怎么办 抖音内容优化与流量恢复方法  自定义你的VS Code状态栏,监控关键信息  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  英雄联盟争者留名活动介绍  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  Go语言中方法接收器的选择:值类型还是指针类型?  word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  空腹吃苹果好吗 苹果空腹摄入指南  英国搜索:多数英国人认为语言搜索是未来搜索  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  苹果手机手电筒无法开启  无人机考证官网 中国民航无人机考证官网登录入口  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  《随手记》启用语音备注方法  键盘保修需要什么_键盘售后维修流程  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  c++如何掌握指针的核心用法_c++指针入门到精通指南  《海贝音乐》均衡器设置方法  J*a实现任务清单管理_集合框架综合入门练手  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  OpenWeatherMap API:通过城市名称获取天气预报数据指南  微博网页版访问入口 微博网页版网页端使用指南  PHP utf8_encode 字符编码转换疑难解析与最佳实践  Win11如何分屏操作_Win11多窗口分屏技巧  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  《合金装备4》有望推出重制版!制作人发话了  如何配置VS Code作为您Git操作的默认编辑器  《健康大兴》注册方法介绍  全球各国上班时间表外贸邮件时间  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  快手缓存清理方法  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  《鹿路通》退余额方法  顺丰快递收费标准查询_如何查看顺丰最新收费价格  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏  Excel宏怎么删除_Excel中删除宏的详细操作流程  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  《i莞家》修改昵称方法  歌词怎么展示在|直播|间视频号?有什么注意事项? 

 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.