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

C++智能指针简述

auto_ptr

  • 设计目的:超出作用域,自动释放内存。
  • 所有权传递:拷贝auto_ptr时,原指针失效,释放所有权;新指针获得所有权。总而言之,允许通过拷贝转移所有权,独占所有权。
  • 缺陷:这个指针使用起来容易出bug。因为这个指针拷贝以后,原指针会被重置,而导致失效,无法继续使用,如果继续使用,就会导致崩溃。所以auto_ptr被淘汰了,不要用它。

unique_ptr

  • 设计目的:超出作用域,自动释放内存,用来代替auto_ptr。
  • 所有权传递:禁止拷贝,只支持通过移动语义传递所有权。通过移动语义传递所有权时,原指针失效,释放所有权;新指针获得所有权。总而言之,只允许通过移动构造转移所有权,不允许拷贝,独占所有权。为什么不支持拷贝,因为所有权传递,更符合移动语义,拷贝是原意是生成一个副本指针,不改变原指针,但是因为独占所有权,所以原指针会被重置为空指针,不符合拷贝的含义。需要注意的是unique_ptr可以作为函数返回值返回,这是因为,返回值可以支持移动语义。

scoped_ptr

  • 设计目的:超出作用域,自动释放内存。
  • 所有权传递:禁止拷贝,不支持传递所有权,只支持交换所有权。总而言之,禁止所有权转移,允许所有权交换。

shared_ptr

  • 中文名:强指针。
  • 设计目的:引用计数减到0,自动释放内存。
  • 所有权传递:允许拷贝,允许多个shared_ptr共享同一个动态创建的对象的所有权。
  • 缺点:互相持有对方实例的shared_ptr时,会导致循环引用问题,导致两个shared_ptr都无法释放内存。

weak_ptr

中文名:弱指针。

  • 设计目的:解决强指针循环引用问题。
  • 所有权:不持有任何所有权,仅进行所有权查询。但是可以转换为强指针。
http://www.lryc.cn/news/432718.html

相关文章:

  • 龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮
  • Android Camera系列(二):TextureView+Camera
  • DFS算法专题(一)——二叉树中的深搜【回溯与剪枝的初步注入】
  • AWS SES服务 Golang接入教程(排坑版)
  • Vite + Vue3 +Vant4出现Toast is not a function
  • 【MATLAB】模拟退火算法
  • 什么是Kubernetes RBAC?
  • 在Spring Boot中通过自定义注解、反射以及AOP(面向切面编程)
  • 安防监控视频平台LntonAIServer视频智能分析平台新增视频质量诊断功能
  • vscode从本地安装插件
  • Superset二次开发之新增复选框Checkbox筛选器
  • PromQL 语法
  • 掌握Go语言中的时间与日期操作
  • 4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)
  • spring数据校验Validation
  • Uniapp基于uni拦截器+Promise的请求函数封装
  • 【工具】使用 Jackson 实现优雅的 JSON 格式化输出
  • ApacheKafka中的设计
  • .NET 自定义过滤器 - ActionFilterAttribute
  • VMware Fusion Pro 13 for Mac虚拟机软件
  • HarmonyOS应用开发环境搭建
  • YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力小目标检测
  • 00Mac安装playwright
  • materail3 CircularProgressIndicator和LinearProgressIndicator有难看的白块和断点
  • 菜鸟入门Docker
  • 什么是单片机?为什么要学习单片机?
  • 电子发射与气体导电
  • 【数据库】MySQL表的Updata(更新)和Delete(删除)操作
  • Unity Adressables 使用说明(六)加载(Load) Addressable Assets
  • 视频监控系统布局策略:EasyCVR视频汇聚平台构建高效、全面的安全防线