当前位置: 首页 > news >正文

C++中的两类智能指针std::unique_ptr与std::shared_ptr

在C++中,std::unique_ptrstd::shared_ptr是两种智能指针,用于管理动态分配的内存资源,避免内存泄漏和提高代码的安全性。它们之间有一些重要的区别,下面对它们进行简要比较:

std::unique_ptr:

  1. 独占所有权std::unique_ptr实现了独占所有权的语义,即一块内存资源只能被一个std::unique_ptr实例所拥有。
  2. 轻量级std::unique_ptr相对于std::shared_ptr更为轻量级,因为不需要维护引用计数。
  3. 移动语义:支持移动语义,可以通过std::move将所有权转移给另一个std::unique_ptr,而不是进行复制操作。
  4. 避免循环引用std::unique_ptr不能用于实现循环引用,因为它无法实现多个指针共享所有权。

std::shared_ptr:

  1. 共享所有权std::shared_ptr实现了共享所有权的语义,多个std::shared_ptr实例可以共同拥有同一块内存资源,通过引用计数来管理资源的生命周期。
  2. 引用计数std::shared_ptr维护了一个引用计数,记录有多少个std::shared_ptr实例指向同一块内存。
  3. 线程安全std::shared_ptr的引用计数是线程安全的,可以在多线程环境下使用。
  4. 循环引用std::shared_ptr可能会导致循环引用的问题,如果两个std::shared_ptr相互引用,可能会导致内存泄漏。

如何选择:

  • 如果资源需要独占所有权,并且不涉及循环引用情况,推荐使用std::unique_ptr
  • 如果多个指针需要共享同一块内存资源,并且需要处理循环引用情况,推荐使用std::shared_ptr

代码示例:

#include <memory>int main() {// std::unique_ptr 示例std::unique_ptr<int> uniquePtr(new int(10));// std::shared_ptr 示例std::shared_ptr<int> sharedPtr = std::make_shared<int>(20);return 0;
}

在示例中,uniquePtr是一个std::unique_ptr指向整型变量,而sharedPtr是一个std::shared_ptr指向整型变量。根据具体需求选择合适的智能指针类型,以确保内存资源的正确管理和避免潜在的问题。

http://www.lryc.cn/news/355842.html

相关文章:

  • java中Future使用详细介绍
  • docker和containerd的区别
  • 汇编实现流水灯
  • SQL生成序列浅析
  • 24年gdcpc省赛C题
  • 以梦为马,不负韶华(3)-AGI在企业服务的应用
  • Xshell 使用
  • 【yijiej】mysql报错 之 报错:Duplicate entry 字段 for key ‘表名.idx_字段’
  • 解决npm卡死,无法安装依赖
  • 速卖通测评揭秘:如何选择安全的渠道操作
  • ping不通ip的解决方法
  • Linux x86_64 UEFI 启动
  • 妙解设计模式之适配器模式
  • 【Linux】Linux下centos更换国内yum源
  • HTML静态网页成品作业(HTML+CSS)——动漫熊出没介绍网页(3个页面)
  • 算法训练营day42
  • 【Vue】自动导入组件
  • mfc140u.dll丢失的解决方法有哪些?怎么全面修复mfc140u.dll文件
  • MySQL8报错Public Key Retrieval is not allowedz 怎么解决?
  • 海外动态IP代理如何提高效率?
  • 解析边缘计算网关的优势-天拓四方
  • 计算机原理 知识回顾
  • WPF 如何调试
  • URL跳转
  • Spring Boot集成rss快速入门demo
  • 重学java 49 List接口
  • 【html+css(大作业)】二级菜单导航栏
  • 算法基础之集合-Nim游戏
  • Diffusion Model, Stable Diffusion, Stable Diffusion XL 详解
  • 智能奶柜:重塑牛奶零售新篇章