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

C++ 智能指针

STL和智能指针关系
1.STL 是标准库的子集:专注于数据结构与算法。
2.智能指针属于 “通用工具库”:与 std::thread、std::future 等工具同属一类,不隶属于 STL 的核心组件。

1. 智能指针

智能指针是一个类模板,通过 RAII(资源获取即初始化)技术封装原始指针,自动管理对象生命周期。

1.核心功能

避免内存泄漏:无需手动调用 delete。

2. RAII(资源获取即初始化)

RAII(Resource Acquisition Is Initialization)是 C++ 中管理资源的核心设计模式,它将资源的生命周期与对象的生命周期绑定,通过对象的构造函数获取资源,析构函数释放资源,从而实现资源的自动管理。

2. 分类

1.std::unique_ptr(独占所有权)

1.特性:独占对象所有权,不可复制,但可移动。
2.应用场景:管理独占资源(如文件句柄、硬件设备)。

2.std::shared_ptr(共享所有权)

1.特性:通过引用计数管理共享对象,最后一个持有者释放内存。
2.应用场景:需要多个指针共享同一对象时(如树形结构)。
3.初始化方式
1.使用原始指针直接初始化(不推荐)
2.使用 std::make_shared(推荐)
优点:
i.异常安全(避免内存泄漏)。
ii.内存分配更高效(仅一次分配,同时存储对象和引用计数)。

3.std::weak_ptr(弱引用)

1.特性:不控制对象生命周期,防止循环引用。
2.应用场景:打破 shared_ptr 的循环引用(如父子对象关系)。
循环引用,没有析构
初始化方式
直接从 shared_ptr 构造
从另一个 std::weak_ptr 初始化

3.常用接口
1.expired() 快速检查对象是否已销毁(等价于 use_count() == 0)。
2.lock() 安全访问对象:返回 shared_ptr,若对象存活则引用计数 + 1,否则返回空。
3.use_count() 获取当前管理对象的 shared_ptr 数量(主要用于调试)。
4.reset() 释放弱引用,变为空 weak_ptr。
5.swap() 交换两个 weak_ptr 的内容。

http://www.xdnf.cn/news/13284.html

相关文章:

  • postgresql搭建与初始化
  • EtherCAT转CC-Link IE协议转换通讯助力库卡机器人与三菱PLC无缝对接
  • 【Linux篇】细品环境变量与地址空间
  • Qt Widget类解析与代码注释
  • day27/60
  • 可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
  • 前端技术 HTML iframe 详细解读
  • 每日算法 -【Swift 算法】删除链表的倒数第 N 个结点
  • 聊聊 Pulsar:Producer 源码解析
  • STL 6分配器
  • 智能文档结构化技术的应用,重塑合同管理模式
  • CSS Modules使用
  • [特殊字符] 以太坊智能合约:原理、执行与核心机制
  • 新能源汽车智慧充电桩管理方案:智能安全识别的实际应用
  • mysql为什么一个表中不能同时存在两个字段自增
  • Q: dify的QA分段方式,question、answer和keywords哪些内容进入向量库呢?
  • 【已解决】python的kafka-python包连接kafka报认证失败
  • 【在线五子棋对战】四、MySQL API 使用
  • 多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​
  • Llama 4开源项目多维分析研究
  • VUE element table 列合并
  • 目标检测中F1-Score指标的详细解析:深度理解,避免误区
  • Nginx攻略
  • C# vs2022 找不到指定的 SDK“Microsof.NET.Sdk
  • Android Wi-Fi 连接失败日志分析
  • 第六章 外部中断
  • 智能合约安全专题(一):什么是重入攻击?——从 DAO 事件谈起
  • Vuex 自动化生成工具
  • 【RPA干货】RPA自动化程序是什么?-rpa百科
  • 十四、【ESP32全栈开发指南:搭建轻量级HTTP服务器】