值得一看
广告
彩虹云商城
广告

热门广告位

c++中shared_ptr和unique_ptr的区别_两种智能指针所有权模型对比

unique_ptr独占所有权,无运行时开销,析构时立即释放资源;shared_ptr共享所有权,通过引用计数管理,有额外内存和性能开销,需注意循环引用问题。

c++中shared_ptr和unique_ptr的区别_两种智能指针所有权模型对比

shared_ptrunique_ptr 是 C++ 中两种常用的智能指针,它们的核心区别在于所有权模型的不同,直接影响资源的管理和生命周期控制。

所有权语义不同

unique_ptr 实现独占式所有权。一个对象只能被一个 unique_ptr 持有,不能复制。如果需要转移所有权,必须使用 std::move。

例如:

  • unique_ptr<int> ptr1 = make_unique<int>(42);
  • unique_ptr<int> ptr2 = ptr1; // 错误:禁止复制
  • unique_ptr<int> ptr3 = std::move(ptr1); // 正确:转移所有权

此时 ptr1 变为空,ptr3 指向原对象。

shared_ptr 实现共享所有权。多个 shared_ptr 可以指向同一个对象,通过引用计数管理资源。当最后一个 shared_ptr 被销毁时,对象自动释放。

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

例如:

  • auto sp1 = make_shared<int>(100);
  • auto sp2 = sp1; // 合法:引用计数加1
  • sp1 和 sp2 共享同一对象,引用计数为2

性能与开销对比

unique_ptr 几乎没有运行时开销。它通常和裸指针大小一样,操作是零成本抽象,适合对性能敏感的场景。

释放由析构函数直接完成,无需额外数据结构。

标书对比王

标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

标书对比王12

查看详情
标书对比王

shared_ptr 有明显开销。除了指向对象的指针,还维护一个控制块(包含引用计数、弱引用计数等),分配内存更多,访问更慢。

每次复制或销毁都要原子操作修改引用计数,在多线程环境下成本更高。

适用场景建议

优先使用 unique_ptr,除非确实需要共享所有权。

  • 类内部管理独占资源时用 unique_ptr
  • 工厂函数返回值可用 unique_ptr 表示唯一所有权
  • 需要在多个地方共享且不确定谁最后使用时,用 shared_ptr
  • 观察者模式中配合 weak_ptr 避免循环引用

资源释放行为差异

unique_ptr 析构时立即释放资源,行为可预测,符合 RAII 原则。

shared_ptr 的释放时机依赖引用计数归零,可能延迟。若存在循环引用(如父子节点互相持有 shared_ptr),会导致内存泄漏,需用 weak_ptr 打破循环。

基本上就这些。选哪个取决于是否需要共享。不需要共享就用 unique_ptr,简单高效;需要共享再考虑 shared_ptr,但注意潜在开销和陷阱。

相关标签:

ai c++ 区别 red 析构函数 auto int 循环 指针 数据结构 线程 多线程 对象

大家都在看:

如何配置C++的AI推理框架环境 TensorRT加速库安装使用
C++与AI部署:ONNX Runtime集成全解析
c++中如何替换字符串中的子串_c++字符串替换子串方法
c++中的std::optional怎么解决空值问题_c++ std::optional使用方法
C++如何连接MySQL数据库_C++ MySQL连接方法
温馨提示: 本文最后更新于2025-09-29 22:28:51,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞6赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容