c++中智能指针怎么用_智能指针使用与原理分析

智能指针通过RAII机制自动管理内存,避免泄漏和悬空指针。std::unique_ptr独占资源,不可复制但可移动;std::shared_ptr共享资源,引用计数为零时释放;std::weak_ptr观察shared_ptr对象,防止循环引用。优先使用make_unique和make_shared,避免裸new/delete,传参时根据需要选择const shared_ptr&或引用,合理使用三者提升代码安全性与可维护性。

c++中智能指针怎么用_智能指针使用与原理分析

智能指针是C++中用于自动管理动态内存的工具,主要目的是避免内存泄漏和悬空指针问题。它们通过RAII(资源获取即初始化)机制,在对象生命周期结束时自动释放所持有的资源。C++标准库提供了几种常用的智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。

std::unique_ptr:独占所有权的智能指符

特点: 一个 unique_ptr 独占所指向对象的所有权,不能复制,但可以移动。

适用于需要确保某一时刻只有一个指针拥有资源的场景。

使用示例:创建方式:auto ptr = std::make_unique(10); 不能赋值或拷贝:auto ptr2 = ptr; 会编译失败 可以通过 move 转移所有权:auto ptr2 = std::move(ptr); 离开作用域时自动 delete 所指对象

适合用在局部资源管理、工厂函数返回值等场合。

立即学习“C++免费学习笔记(深入)”;

std::shared_ptr:共享所有权的智能指针

特点: 多个 shared_ptr 可以共享同一个对象,内部使用引用计数跟踪有多少指针指向该资源。当最后一个 shared_ptr 被销毁时,资源自动释放。

使用示例:创建方式:auto sptr = std::make_shared(20); 可复制:auto sptr2 = sptr;,引用计数加1 每次析构一个 shared_ptr,引用计数减1,为0时释放资源

注意不要直接用裸指针构造多个 shared_ptr,会导致重复 delete。应优先使用 make_shared 提升性能并避免异常安全问题。

std::weak_ptr:配合 shared_ptr 防止循环引用

用途: weak_ptr 不增加引用计数,只是“观察” shared_ptr 所管理的对象,用于解决 shared_ptr 循环引用导致内存无法释放的问题。

不能直接解引用,需调用 lock() 获取临时 shared_ptr 若原对象已释放,lock() 返回 nullptr典型场景:

父子节点互相持有 shared_ptr 会造成循环引用。将子节点对父节点的引用改为 weak_ptr,打破循环。

原理简析与最佳实践

智能指针的核心在于析构函数中自动调用 delete 或自定义删除器。同时支持数组和自定义删除逻辑(如关闭文件句柄、释放 GDI 资源等)。

优先使用 make_unique 和 make_shared,更安全高效 避免裸 new/delete,交给智能指针处理 小心 shared_ptr 的循环引用,及时引入 weak_ptr 函数传参时,若只是使用对象,建议传 const shared_ptr& 或直接引用对象

基本上就这些。合理使用这三种智能指针,能大幅降低C++内存管理出错的概率,让代码更健壮、易维护。

以上就是c++++中智能指针怎么用_智能指针使用与原理分析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476624.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++中如何使用priority_queue实现堆排序_c++优先队列堆排序方法
上一篇 2025年12月19日 00:34:21
c++中抽象类是什么_抽象类的定义与作用解析
下一篇 2025年12月19日 00:34:32

相关推荐

  • win10安装net framework 3.5失败怎么办_离线安装.NET Framework 3.5教程

    win10安装net framework 3.5失败怎么办_离线安装.NET Framework 3.5教程win10安装net framework 3.5失败怎么办_离线安装.NET Framework 3.5教程win10安装net framework 3.5失败怎么办_离线安装.NET Framework 3.5教程win10安装net framework 3.5失败怎么办_离线安装.NET Framework 3.5教程

    首先使用DISM命令结合系统镜像离线安装,通过挂载ISO并指定源路径启用.NET Framework 3.5;若失败,则复制sxs文件夹到本地并用相同命令指定本地源;还可通过组策略禁用Windows Update依赖,强制使用本地源安装;最后可选用可信第三方离线包一键安装。 如果您尝试在Window…

    2026年10月3日 • 用户投稿
    000
  • 性能更优秀!独游开发商称NS2可支持DLSS 3.1!

    性能更优秀!独游开发商称NS2可支持DLSS 3.1!性能更优秀!独游开发商称NS2可支持DLSS 3.1!性能更优秀!独游开发商称NS2可支持DLSS 3.1!性能更优秀!独游开发商称NS2可支持DLSS 3.1!

    根据外媒Twisted Voxel的最新消息,任天堂即将推出的下一代主机Nintendo Switch 2或将支持DLSS 3.1技术。 该情报源自独立游戏开发与移植团队Lynx Byte Games在其官网公布的一份技术规格文档。文档中详细描述了Switch 2的硬件配置及其特色功能,其中多数信息…

    2026年10月3日 • 用户投稿
    100
  • 联想电脑CPU性能下降?提升运行速度的技巧

    联想电脑CPU性能下降?提升运行速度的技巧联想电脑CPU性能下降?提升运行速度的技巧联想电脑CPU性能下降?提升运行速度的技巧联想电脑CPU性能下降?提升运行速度的技巧

    将电源模式设为高性能以提升CPU性能;2. 通过任务管理器禁用不必要的启动项并结束高占用进程;3. 升级内存至16GB双通道并更换NVMe SSD;4. 清理灰尘、更换导热硅脂以改善散热;5. 使用磁盘清理和存储感知功能,必要时重置系统保留文件。 如果您发现联想电脑的CPU性能下降,导致运行速度变慢…

    2026年10月3日 • 用户投稿
    000
  • Java CompletableFuture:高效串行处理异步任务流并汇总结果

    Java CompletableFuture:高效串行处理异步任务流并汇总结果Java CompletableFuture:高效串行处理异步任务流并汇总结果Java CompletableFuture:高效串行处理异步任务流并汇总结果Java CompletableFuture:高效串行处理异步任务流并汇总结果

    本文深入探讨了如何使用Java CompletableFuture 串行执行一系列异步任务,并将其结果收集到一个列表中。针对常见的挑战,如确保任务按序执行、避免不必要的线程开销,文章分析了 thenApplyAsync 和 thenCombineAsync 的局限性,并详细介绍了两种基于 thenC…

    2026年10月3日 • 用户投稿
    100
  • 怎么让豆包AI生成Python图形界面程序

    怎么让豆包AI生成Python图形界面程序怎么让豆包AI生成Python图形界面程序怎么让豆包AI生成Python图形界面程序怎么让豆包AI生成Python图形界面程序

    用豆包ai生成python图形界面程序的关键在于明确需求并清晰描述。首先确定程序功能,如计算器或数据输入表单;其次指定使用tkinter库以确保代码易运行;接着详细说明界面元素如按钮、输入框及其交互逻辑;最后检查生成的代码是否完整,注意模块导入和事件绑定等问题,确保程序能正常运行。 ☞☞☞AI 智能…

    2026年10月3日 • 用户投稿
    100
  • win10如何设置静态IP地址_win10手动配置静态IP地址的详细教程

    win10如何设置静态IP地址_win10手动配置静态IP地址的详细教程win10如何设置静态IP地址_win10手动配置静态IP地址的详细教程win10如何设置静态IP地址_win10手动配置静态IP地址的详细教程win10如何设置静态IP地址_win10手动配置静态IP地址的详细教程

    要为Windows 10设备设置静态IP以便远程访问或端口映射,可采用三种方法:首先通过“设置”应用进入“网络和Internet”,选择连接类型后编辑IP设置,手动输入IP地址、子网掩码、网关及DNS并保存;其次通过控制面板的“更改适配器选项”进入网络属性,配置IPv4的静态IP及相关参数;最后高级…

    2026年10月3日 • 用户投稿
    000
  • 怎么用豆包AI帮我解释这段代码 一键解析代码功能的豆包AI操作技巧

    怎么用豆包AI帮我解释这段代码 一键解析代码功能的豆包AI操作技巧怎么用豆包AI帮我解释这段代码 一键解析代码功能的豆包AI操作技巧怎么用豆包AI帮我解释这段代码 一键解析代码功能的豆包AI操作技巧怎么用豆包AI帮我解释这段代码 一键解析代码功能的豆包AI操作技巧

    豆包ai的“一键解析代码”功能确实能帮助用户快速理解陌生代码,尤其适合初学者或调试他人代码时使用。一、先准备好要解析的代码,包括完整函数、类定义或逻辑片段,并确保包含变量定义和依赖库导入,如 python 中的 pandas 或 numpy 导入语句。二、在豆包ai聊天界面粘贴代码后,点击“解析代码…

    2026年10月3日 • 用户投稿
    000
  • win10升级后黑屏只有鼠标怎么办_Win10更新后黑屏仅显示鼠标指针的修复指南

    win10升级后黑屏只有鼠标怎么办_Win10更新后黑屏仅显示鼠标指针的修复指南win10升级后黑屏只有鼠标怎么办_Win10更新后黑屏仅显示鼠标指针的修复指南win10升级后黑屏只有鼠标怎么办_Win10更新后黑屏仅显示鼠标指针的修复指南win10升级后黑屏只有鼠标怎么办_Win10更新后黑屏仅显示鼠标指针的修复指南

    首先重启Windows资源管理器进程,若无效则进入安全模式卸载显卡驱动并重装,同时通过系统配置禁用非必要启动项与服务,再使用SFC和DISM命令修复系统文件,最后检查注册表中Winlogon的Shell键值是否为explorer.exe,逐步排除开机黑屏问题。 如果您在完成Windows 10系统更…

    2026年10月3日 • 用户投稿
    100
  • es文件浏览器空间分析功能在哪 es文件浏览器存储空间分析功能入口与使用

    es文件浏览器空间分析功能在哪 es文件浏览器存储空间分析功能入口与使用es文件浏览器空间分析功能在哪 es文件浏览器存储空间分析功能入口与使用es文件浏览器空间分析功能在哪 es文件浏览器存储空间分析功能入口与使用es文件浏览器空间分析功能在哪 es文件浏览器存储空间分析功能入口与使用

    通过ES文件浏览器的存储空间分析功能可查看各文件夹占用情况。首先打开应用,进入工具箱中的空间分析功能,授权后选择存储区域并开始扫描。扫描完成后以图形化方式展示各目录占用比例,颜色越深占用越大。用户可据此定位大文件或冗余数据,长按文件选择删除或移动以释放空间,并重新扫描验证清理效果。 如果您想了解设备…

    2026年10月3日 • 用户投稿
    000
  • Java CompletableFuture 链式顺序执行与结果列表收集教程

    Java CompletableFuture 链式顺序执行与结果列表收集教程Java CompletableFuture 链式顺序执行与结果列表收集教程Java CompletableFuture 链式顺序执行与结果列表收集教程Java CompletableFuture 链式顺序执行与结果列表收集教程

    本教程详细探讨了如何在Java中使用CompletableFuture实现一系列异步任务的顺序执行,并将每个任务的结果收集到一个列表中。文章介绍了两种主要策略:一种是利用外部列表累积结果,另一种是采用更函数式的方式在CompletionStage链中传递并更新结果列表。通过深入解析thenCompo…

    2026年10月3日 • 用户投稿
    000
  • CAD版本转换技巧

    CAD版本转换技巧CAD版本转换技巧CAD版本转换技巧CAD版本转换技巧

    在完成高版本CAD软件的绘图工作后,若需在低版本环境中打开文件,必须进行格式降级处理。为实现这一目标,通常可借助软件内置的“另存为”功能,选择较早的CAD版本格式进行保存,或使用专业的转换工具来完成兼容性调整,确保文件能在旧版程序中顺利读取与编辑。 1、 准备好需要转换的CAD文件以及专用转换工具 …

    2026年10月3日 • 用户投稿
    000
  • 苹果用户如何快速安装DeepSeek实用攻略

    苹果用户如何快速安装DeepSeek实用攻略苹果用户如何快速安装DeepSeek实用攻略苹果用户如何快速安装DeepSeek实用攻略苹果用户如何快速安装DeepSeek实用攻略

    苹果用户可在iphone上通过两种方法快速安装deepseek。①使用safari浏览器访问网页版:打开safari搜索官网,点击“立即体验”进入界面,可选择添加到主屏幕以便快速启动;②在app store下载官方app:搜索“deepseek”,确认开发者后下载安装并登录账号使用。此外建议设置si…

    2026年10月3日 • 用户投稿
    600
  • win10黑屏左上角光标闪烁进不了系统_win10黑屏光标闪烁问题的修复指南

    win10黑屏左上角光标闪烁进不了系统_win10黑屏光标闪烁问题的修复指南win10黑屏左上角光标闪烁进不了系统_win10黑屏光标闪烁问题的修复指南win10黑屏左上角光标闪烁进不了系统_win10黑屏光标闪烁问题的修复指南win10黑屏左上角光标闪烁进不了系统_win10黑屏光标闪烁问题的修复指南

    黑屏仅光标闪烁时,先调整BIOS启动顺序,再尝试安全模式排查冲突,修复引导记录,卸载最新更新,最后重置显卡驱动。 如果您在启动Windows 10时遇到屏幕全黑,仅左上角有一个光标持续闪烁,无法进入桌面或系统界面的情况,这通常表明系统启动过程中出现了障碍。以下是针对此问题的多种修复方法。 本文运行环…

    2026年10月3日 • 用户投稿
    700
  • iPhone 17全系安兔兔跑分成绩曝光:A19 Pro不如A19?

    iPhone 17全系安兔兔跑分成绩曝光:A19 Pro不如A19?iPhone 17全系安兔兔跑分成绩曝光:A19 Pro不如A19?iPhone 17全系安兔兔跑分成绩曝光:A19 Pro不如A19?iPhone 17全系安兔兔跑分成绩曝光:A19 Pro不如A19?

    9月15日,安兔兔公布了一张关于iphone 17系列新机型的性能测试截图。图中显示,搭载a19 pro芯片的iphone air综合跑分竟比配备a19芯片的iphone 17标准版低了超过15万 分。 iPhone Air 从曝光的跑分数据来看,iPhone 17 Pro Max以高达271775…

    2026年10月3日 • 用户投稿
    000
  • 如何让豆包AI处理Python中的日期时间

    如何让豆包AI处理Python中的日期时间如何让豆包AI处理Python中的日期时间如何让豆包AI处理Python中的日期时间如何让豆包AI处理Python中的日期时间

    要让豆包ai准确帮助处理python中的日期时间问题,需明确提问场景、指定使用的库、补充细节。1. 提问时具体说明操作,如解析、格式化或时区转换;2. 指定使用标准库如datetime或第三方库如dateutil;3. 当回答不准确时,补充如是否使用时区、时间格式等细节以引导修正。 ☞☞☞AI 智能…

    2026年10月3日 • 用户投稿
    600
  • 1-7月小米SU7城市销量TOP20出炉:北京未进前十

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 小米su7 %ign%ignore_a_1%re_a_1%1-7月小米SU7城市销量TOP20榜单正式发布。数据显示,杭州市以12451辆的销量遥遥领先,位居榜首。上海市以9085辆、深圳市以8…

    2026年10月3日
    1300
  • 响应式流中“finally”逻辑与错误处理的实践指南

    响应式流中“finally”逻辑与错误处理的实践指南响应式流中“finally”逻辑与错误处理的实践指南响应式流中“finally”逻辑与错误处理的实践指南响应式流中“finally”逻辑与错误处理的实践指南

    在Project Reactor响应式编程中,传统Java的try-catch-finally模式不再适用,尤其是涉及finally中阻塞操作时。本文将详细阐述如何在响应式流中优雅地处理错误信号,并实现类似finally的资源清理或状态保存逻辑,通过Mono.error、doOnError和onEr…

    2026年10月3日 • 用户投稿
    1000
  • 如何从损坏的移动硬盘恢复数据?使用专业软件扫描并提取文件

    如何从损坏的移动硬盘恢复数据?使用专业软件扫描并提取文件如何从损坏的移动硬盘恢复数据?使用专业软件扫描并提取文件如何从损坏的移动硬盘恢复数据?使用专业软件扫描并提取文件如何从损坏的移动硬盘恢复数据?使用专业软件扫描并提取文件

    首先使用专业数据恢复软件扫描移动硬盘以提取丢失文件,确保设备被系统识别后安装如DiskGenius等工具,通过深度扫描找回数据并保存至其他存储设备;其次可利用CHKDSK命令修复文件系统错误,输入“chkdsk X: /f /r”修复逻辑问题,提升恢复成功率;最后若硬盘未显示,进入磁盘管理手动分配驱…

    2026年10月3日 • 用户投稿
    800
  • 怎么用豆包AI帮我设计微服务架构 用AI规划分布式系统的完整指南

    怎么用豆包AI帮我设计微服务架构 用AI规划分布式系统的完整指南怎么用豆包AI帮我设计微服务架构 用AI规划分布式系统的完整指南怎么用豆包AI帮我设计微服务架构 用AI规划分布式系统的完整指南怎么用豆包AI帮我设计微服务架构 用AI规划分布式系统的完整指南

    豆包ai可通过梳理业务边界、设计通信方式、制定治理策略、模拟问题解决来辅助微服务架构设计。1. 可输入业务流程让其识别独立服务,实现合理拆分;2. 可分析rest、grpc、消息队列等通信方式优劣并推荐适用场景;3. 可列出nacos、sentinel等治理工具并提供熔断限流、服务发现等策略建议;4…

    2026年10月3日 • 用户投稿
    000
  • MK14完全作战手册:从子弹选择到满配魔改

    MK14完全作战手册:从子弹选择到满配魔改MK14完全作战手册:从子弹选择到满配魔改MK14完全作战手册:从子弹选择到满配魔改MK14完全作战手册:从子弹选择到满配魔改

    在《逃离塔科夫》的残酷战场上,mk14无疑是掌控中远距离的致命王者!这把能全自动泼水的射手步枪,凭借傲人射程、稳定弹道和迅猛射速,搭配7.62×51毫米的大口径弹药,能对广泛作战距离内的敌人施加毁灭性压力。想要真正驾驭这头猛兽?这份深度指南就是你的战场秘籍! 弹药心脏:穿透力与性价比的终极抉择 弹药…

    2026年10月3日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信