news 2026/6/15 16:58:25

C++ 资源管理体系:RAII、智能指针,以及为什么现代 C++ 几乎不再写 new/delete

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 资源管理体系:RAII、智能指针,以及为什么现代 C++ 几乎不再写 new/delete

很多从 Java / Android 转到 C++ 的工程师,一开始都会卡在一个问题上:

没有 GC,C++ 到底怎么管资源?
为什么老代码到处 new/delete,而现代 C++ 却几乎不写了?

如果你已经理解了构造函数 / 析构函数,那这篇文章,会帮你把后面最关键的一整套体系一次性打通。

一、先给系统级结论

👉RAII 是思想
👉构造 / 析构是机制
👉智能指针是“内存资源的 RAII 化”
👉不写 new/delete 是现代 C++ 的工程结论

这四点,构成了现代 C++ 的资源管理体系

二、为什么 C++ 不靠 finally 管资源?

在 Java 里,释放资源通常是这样:

try (FileInputStream fis = new FileInputStream("a.txt")) { // use file }

或者:

FileInputStream fis = null; try { fis = new FileInputStream("a.txt"); } finally { if (fis != null) fis.close(); }

核心是:

👉你显式告诉语言:结束时要干什么。

2.1 C++ 的模式完全不同

void test() { File f("a.txt"); // use file } // 👈 自动 fclose

你没有写 finally。
但语言保证:

👉 离开作用域,一定调用析构函数。

而析构函数里:

~File() { fclose(fp_); }

于是形成模型:

进入作用域 → 构造函数(拿资源) 离开作用域 → 析构函数(放资源)

这套机制,叫做:

👉RAII(Resource Acquisition Is Initialization)
👉 资源获取即初始化

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 2:18:03

GLM-4.6V-Flash-WEB怎么用?网页推理点击即用教程

GLM-4.6V-Flash-WEB怎么用?网页推理点击即用教程 智谱最新开源,视觉大模型。 1. 背景与技术价值 1.1 视觉大模型的演进趋势 近年来,多模态大模型在图文理解、视觉问答(VQA)、图像描述生成等任务中展现出强大能力。GL…

作者头像 李华
网站建设 2026/6/15 15:04:05

埋孔设计在HDI典型应用场景中的实践案例

Q:在智能手机、智能手表等消费电子领域,HDI 板对小型化、高密度要求极高,埋孔设计如何发挥作用?A:消费电子是 HDI 板的核心应用场景,这些设备追求 “小体积、多功能、轻薄化”,而埋孔设计恰好能…

作者头像 李华
网站建设 2026/6/15 12:15:07

零基础学LVGL:30分钟创建第一个GUI

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个LVGL新手教学项目,逐步实现:1. 开发环境搭建指南;2. 显示Hello World标签;3. 添加按钮和事件处理;4. 简单动画效…

作者头像 李华