新闻中心
C++ shared_ptr用法_C++智能指针详解
shared_ptr通过引用计数管理动态内存,多个指针共享对象所有权,使用make_shared创建更安全,引用计数为0时自动释放内存,需用weak_ptr避免循环引用。

在C++中,shared_ptr 是一种智能指针,用于管理动态分配的对象,确保对象在不再被使用时自动释放内存。它通过引用计数机制实现共享所有权,多个 shared_ptr 可以指向同一个对象,当最后一个指向该对象的 shared_ptr 被销毁或重置时,对象才会被自动删除。
1. shared_ptr 的基本用法
要使用 shared_ptr,需要包含头文件 memory:
创建一个 shared_ptr 的常见方式是使用 std::make_shared,这是推荐的做法,因为它更高效且异常安全:
也可以从原始指针构造(不推荐直接使用裸指针):
std::shared_ptr2. 引用计数与共享所有权
shared_ptr 内部维护一个引用计数,记录有多少个 shared_ptr 实例共享同一个对象。每次拷贝会增加计数,每次析构或赋值会减少计数。
查看当前引用计数的方法是调用 use_count():
auto p2 = p1; // 引用计数变为 2
std::cout
当引用计数降为 0 时,所管理的对象会被自动 delete。
N世界
一分钟搭建会展元宇宙
138
查看详情
3. 避免循环引用
使用 shared_ptr 时需小心循环引用问题。例如两个对象互相持有对方的 shared_ptr,会导致引用计数永远不为 0,造成内存泄漏。
解决办法是使用 std::weak_ptr 打破循环。它是一个弱引用,不增加引用计数:
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++智能指针详解的详细内容,更多请关注其它相关文章!
# 相关文章
# 微营销推广软件哪个好做
# 如何运营好sem营销seo
# 建设网站培训方案范文
# 安丘网站优化推广价格
# DOTA网站建设游戏app
# 跃进村网站推广优化
# 闵行区创意营销推广
# 网站视频推广公司排名榜
# 山东网站推广步骤
# 速卖通站外营销推广
# 中文网
# c++智能指针
# 它是
# 才会
# 是一种
# 内存管理
# 这是
# 如何实现
# 多个
# 有什么
# red
# c++
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】
深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
微博网页版首页入口 微博电脑端官网登录链接
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
深入理解Promise链:如何在catch后中断then的执行
J*a 递归快速排序中静态变量的状态管理与陷阱
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
Lar*el DB::listen 事件中的查询执行时间单位解析
J*aScript实现动态背景色下的文本与按钮颜色自适应调整
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口
mc.js官网登录入口 mc.js官方登录入口最新版
整合Supabase认证与Django模型:跨模式迁移的解决方案
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
可靠CSGO开箱平台解析 CSGO开箱网合集
如何在Promise链中优雅地中断后续then执行
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
抖音网页版企业服务中心登录入口_抖音网页版企业登录平台
Python多版本共存与虚拟环境管理深度指南
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
steam官方入口大全 steam账号注册及操作指南
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
蛙漫移动版在线看 蛙漫手机浏览器直达入口
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
Golang如何安装Swagger工具_GoSwagger文档生成环境
谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作
解决移动端滚动问题的overflow属性应用指南
Typer应用中动态命令行参数的解析与处理
解决Bootstrap卡片顶部边距导致背景图下移的问题
Python字典中优雅地迭代剩余元素的方法
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程
顺丰国际快递查询 国际件官方查询入口
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
淘宝支付提示失败如何解决 淘宝支付流程优化方法
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南


2025-11-29
浏览次数:次
返回列表