新闻中心
c++怎么使用智能指针_c++智能指针类型与用法说明
C++中智能指针通过RAII管理内存,避免泄漏。1. unique_ptr独占所有权,不可复制但可移动,离开作用域自动释放;2. shared_ptr共享所有权,引用计数控制生命周期,用make_shared创建;3. weak_ptr不增加引用计数,防循环引用,需lock()访问对象。优先使用make_unique和make_shared,避免裸指针。

在C++中,智能指针是用于自动管理动态内存的工具,能有效避免内存泄漏和悬空指针问题。它们通过RAII(资源获取即初始化)机制,在对象生命周期结束时自动释放所管理的资源。C++标准库提供了几种主要的智能指针类型,每种适用于不同场景。
std::unique_ptr — 独占所有权的智能指针
特点:同一时间只能有一个unique_ptr拥有对资源的控制权,不能复制,但可以移动。
适用于:确保某个资源只被一个所有者管理的场景。
常用操作:
Musho
AI网页设计Figma插件
76
查看详情
- 使用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_shared和make_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性能画面对比


2025-11-03
浏览次数:次
返回列表
#include <memory><br>std::shared_ptr<int> ptr1 = std::make_shared<int>(50);<br>std::shared_ptr<int> ptr2 = ptr1; // 引用计数变为2<br>// 当ptr1和ptr2都离开作用域后,内存才释放