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

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 的内容。

相关文章:

  • STM32标准库-DMA直接存储器存取
  • 卡方检验(χ²检验)
  • 6个月Python学习计划 Day 19 - 模块与包的实战拆分
  • AI赋能农业
  • 线程分离属性
  • JavaScript BOM 详细介绍
  • C++ 标准模板库(STL)详解文档
  • 2506C++,C++的时间库
  • 2025-03-15-位运算
  • 树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
  • Canfestival的移植思想
  • SpringBoot项目报错汇总
  • 磐维数据库的权限使用
  • 7.6 Finetuning the LLM on instruction data
  • SciencePlots——绘制论文中的图片
  • 软件开发和嵌入式开发岗位的面试题
  • PLC入门【7】基本指令的总结(MC、MCR)
  • threadlocal的实现说明
  • Doris “_stream_load“ 方式批量导入数据
  • 使用Ajax从前端向后端发起请求
  • 如何做影视网站/网站的seo优化报告
  • 做车身拉花的网站/如何发布自己的广告
  • 网站建设公司哪家好智搜宝/网络推广的公司更可靠
  • 网站建设实践鉴定/软文的目的是什么
  • 徐州招标投标信息网/志鸿优化设计
  • 用wordpress做的网站有哪些/百度权重域名