新闻中心

c++怎么使用智能指针_c++智能指针类型与用法说明

2025-11-03
浏览次数:
返回列表
C++中智能指针通过RAII管理内存,避免泄漏。1. unique_ptr独占所有权,不可复制但可移动,离开作用域自动释放;2. shared_ptr共享所有权,引用计数控制生命周期,用make_shared创建;3. weak_ptr不增加引用计数,防循环引用,需lock()访问对象。优先使用make_unique和make_shared,避免裸指针。

c++怎么使用智能指针_c++智能指针类型与用法说明

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

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

特点:同一时间只能有一个unique_ptr拥有对资源的控制权,不能复制,但可以移动。

适用于:确保某个资源只被一个所有者管理的场景。

常用操作:

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho
  • 使用std::make_unique创建(C++14起支持)
  • 离开作用域时自动释放内存
  • 可通过std::move转移所有权

示例:

#include <memory><br>std::unique_ptr<int> ptr = std::make_unique<int>(42);<br>*ptr = 100; // 使用指针<br>// 离开作用域时自动释放

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

特点:多个shared_ptr可以共享同一个对象,内部使用引用计数,当最后一个shared_ptr销毁时,资源自动释放。

适用于:需要多个部分共享同一个对象的场景。

常用操作:

  • 使用std::make_shared高效创建
  • 拷贝shared_ptr会增加引用计数
  • 可用use_count()查看引用数量

示例:

#include <memory><br>std::shared_ptr<int> ptr1 = std::make_shared<int>(50);<br>std::shared_ptr<int> ptr2 = ptr1; // 引用计数变为2<br>// 当ptr1和ptr2都离开作用域后,内存才释放

std::weak_ptr — 非拥有型指针,配合shared_ptr使用

特点:不增加引用计数,用于观察shared_ptr管理的对象,防止循环引用。

适用于:解决shared_ptr之间相互引用导致内存无法释放的问题。

使用方法:

  • shared_ptr构造
  • 调用lock()获取临时shared_ptr来访问对象
  • 若对象已释放,lock()返回空shared_ptr

示例:

std::shared_ptr<int> shared = std::make_shared<int>(30);<br>std::weak_ptr<int> weak = shared;<br>if (auto locked = weak.lock()) {<br>    std::cout << *locked << std::endl;<br>}

基本上就这些。合理选择智能指针类型,能大幅提升代码安全性和可维护性。注意避免循环引用,优先使用make_sharedmake_unique创建,减少异常风险。不复杂但容易忽略细节。

以上就是c++++怎么使用智能指针_c++智能指针类型与用法说明的详细内容,更多请关注其它相关文章!


# 中文网  # 职场seo专员的需求  # 留学网站文案推广怎么做  # 无锡国际网站建设流程  # 美容seo网站优化方案  # 凯里网站建设路火锅  # 鱼台网站推广公司电话  # 安丘优化网站多少钱  # seo营销效果好  # 惠州网站建设设计报价  # discuz超级seo  # 解决问题  # 几种  # 工具  # 相关文章  # 见性  # 如何用  # 多线程  # 如何使用  # 多个  # 适用于  # red  # 标准库  # 作用域  # c++  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  最新韩小圈网页版登录入口_官网在线观看官方链接  Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】  如何更改在 Excel 中打开超链接时的默认浏览器  探索高级语言到C/C++的转译路径:以Go为例及内存管理策略  qq游戏大厅官方下载_qq游戏免费下载安装入口  CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整  如何将HTML表格多行数据保存到Google Sheets  qq游戏免费畅玩入口_qq游戏电脑版快速启动  jQuery Mask 插件中实现电话号码固定前导零的教程  Mac怎么查看崩溃日志_Mac控制台错误报告分析  b站赚钱渠道_b站收益来源  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析  在Go Martini框架中高效服务动态生成图像的实践指南  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  妖精动漫免费平台 妖精动漫官网资源观看网址  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  J*aScript数组对象转换:按指定键分组与值收集  极兔快递快件信息查询系统 极兔快递官网运单号追踪  CSS布局中意外空白:解决padding-top导致的顶部间距问题  163邮箱登录密码 163邮箱忘记密码找回  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  C#中解析不规范的HTML为XML 常见的坑与解决办法  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题  漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】  深入理解J*aScript Promise异步执行与微任务队列  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注  vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  如何在Promise链中有效终止错误处理后的执行  可靠CSGO开箱平台解析 CSGO开箱网合集  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  cad如何更改注释性对象的比例_cad注释性比例调整方法  实现全屏滚动与导航点:专业教程  ArrayList与LinkedList核心操作的Big-O复杂度分析  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比 

搜索