C++笔记之销毁、释放、转移与unique_ptr的所有权
📅 2026/7/6 3:32:58
👁️ 阅读次数
📝 编程学习
C++笔记之销毁、释放、转移与unique_ptr的所有权
code review!
文章目录
- C++笔记之销毁、释放、转移与unique_ptr的所有权
- 1. C++动态内存管理中销毁和释放的含义
- 1.1 概念定位不同
- 1.2 在常用操作中的对应关系
- 1.2.1 核心操作:`delete` 关键字
- 1.2.2 显式拆分的情况
- 1.3 对比总结表
- 1.4 一个通俗的比喻
- 2. std::unique_ptr的reset()、release()分别是销毁or释放?
- 2.1 `release()` —— 既不销毁,也不释放
- 2.2 `reset()` —— 既销毁,又释放
- 2.3 总结对比
- 3. unique_ptr转移堆内存所有权的方法
- 3.1 使用 `std::move()`(推荐)
- 3.2 使用 `release()` 配合 `reset()`
- 3.3 函数参数传递(传值)
- 3.4 函数返回值(最特殊、最优雅)
- 3.4.1 为什么不需要写 `std::move`?
- 3.5 总结:`std::unique_ptr` 所有权转移完整版
- 4. p=nullptr等价于p.reset()?
- 4.1 它们之间极其微小的区别
- 4.2 编码建议
- 5. 裸指针(Raw Pointer)与 unique_ptr 的转换
- 5.1 什么是裸指针(Raw Pointer)?
- 5.2 `std::unique_ptr` 与裸指针的互相转换
- 5.2.1 裸指针 ➔ `unique_ptr`(获取管理权)
- 5.2.2 `unique_ptr` ➔ 裸指针(借出或交出管理权)
- 5.3 核心转换总结表
1. C++动态内存管理中销毁和释放的含义
在C++动态内存管理中,销毁(Destruction)和释放(Deallocation/Freeing)是两个经常被一起提及、但底层逻辑完全不同的概念。
简单来说:销毁关注的是"对象生命周期的结束",而释放关注的是"内存空间的归还"。
可以通过以下几个核心维度来彻底搞懂它们的区别。
1.1 概念定位不同
销毁 (Destruction)
- 针对对象:它是面向对象层面的概念。
- 核心工作:调用对象的析构函数(Destructor)。用于清理对象内部占用的资源(例如关闭文件句柄、释放对象内部自己
new出来的其他内存、断开网络连接等)。 - 结果:此时对象的生命周期正式结束,对象不再合法存在,但它曾经占用的那块内存空间还没有交还给操作系统。
释放 (Deallocation)
- 针对内存:它是系统/内存管理
编程学习
技术分享
实战经验