C++ 中的智能指针

很基础的内容,主要用于记录、记忆、回顾。

C++ 中智能指针的存在主要是为了解决内存管理的问题,老生常谈的 new 了一个对象后来忘记 delete 的问题。Rust 智能指针却是不同的设计需求,主要是为了实现堆上内存分配、多所有权等。因为 Rust 一般变量的所有权和引用借用机制就保证了内存管理的问题,但却牺牲了随意的在堆上分配内存、对同一个变量拥有多个所有权的能力。说回来,C++ 中智能指针实现的倒是 Rust 中基础的所有权那一套。

C++ 中智能指针主要有四种,都是类模板:

  1. auto_ptr:已被遗弃,不再推荐使用,被更好的 unique_ptr 代替
  2. shared_ptr:超级常用,实现的是引用技术的能力
  3. unique_ptr:实现的是所有权机制,即对一个变量的 unique_ptr 只能有一个
  4. weak_ptr:与 Rust 中的 Weak 类似,配合 shared_ptr 实现不导致内存泄漏的循环引用

C++ 智能指针用于管理 new 出来的堆内存,而且必须指向 new 出来的变量地址。因为智能指针最基本的能力就是在离开作用域时自主 delete 内存,如果这个内存是由栈或者其他机制管理的,到底由谁管理就冲突了。

右值 unique_ptr 可以赋值给另一个 unique_ptr。左值 unique_ptr 不可以,这样就违背了 unique_ptr 维护的单所有权模式,编译器不允许。右值 unique_ptr 在赋值后就消亡了,所以无所谓。对于 move(左值 unique_ptr)这种,编译器是允许的,原来的左值 unique_ptr 在赋与新值后还可以使用,责任由程序员承担,类似于 rust unsafe。

相关推荐
峥嵘life14 小时前
2026华为AI码道 CodeArts 使用分享:Windows端 + 服务器CLI 实战总结
android·大数据·开发语言·python
x秀x14 小时前
sam3新手使用教程
开发语言·python
Java后端的Ai之路14 小时前
大模型LLM评估完全指南
开发语言·人工智能·python·llm·评估
别动我齐刘海14 小时前
ROS2 Jazzy + C++ 实战路线——基础学习1
c++·vscode·python·ubuntu·机器学习·自动驾驶·github
Brilliantwxx14 小时前
【STM32】 从HAL库源码深度解析I2C(源码解析+面试题)
开发语言·stm32·单片机·嵌入式硬件·架构
小白学大数据14 小时前
Python 小工具实战:用问财接口搭建金融数据采集器
开发语言·人工智能·python
泡海椒14 小时前
jquick-pdf 核心原理解析:基于 HTML 模板动态渲染 PDF 的实现逻辑
java·开发语言·pdf
j7~14 小时前
【Linux网络加餐】(篇七)网络版计算器(中):协议落地、报文分隔与完整链路
linux·c++·网络编程·tcp·报文分割·网络计算器·协议落地
青少儿编程课堂14 小时前
多源最短路与最小环(Floyd 算法图论解析)
c++·python·算法·bfs·信息学竞赛
6Hzlia15 小时前
【Classic 150 刷题计划】 LeetCode 228. 汇总区间 | C++ 锚点游标与断点检测法
c++·算法·leetcode