news 2026/4/21 23:50:45

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/4/20 6:21:30

PCB埋孔与盲孔、通孔的对比

Q:埋孔、盲孔、通孔是 HDI 板的三种主要过孔类型,它们在结构和应用上有哪些核心区别?A:这三种过孔类型的核心区别在于连接方式、可见性和制造工艺,这些差异直接决定了它们在 HDI 设计中的适用场景。简单来说&#xff0…

作者头像 李华
网站建设 2026/4/19 17:24:05

5分钟部署Qwen2.5-0.5B,阿里开源大模型网页推理一键体验

5分钟部署Qwen2.5-0.5B,阿里开源大模型网页推理一键体验 1. 引言:轻量级大模型的实践价值 1.1 背景与需求驱动 随着大语言模型(LLM)在自然语言处理领域的广泛应用,越来越多开发者希望快速验证模型能力、构建原型系统…

作者头像 李华
网站建设 2026/4/21 20:44:52

虎贲等考 AI:AI 驱动的全流程论文创作生态,重新定义学术写作效率

在学术研究与论文创作的征程中,研究者与学子们常面临文献梳理繁琐、数据处理复杂、框架搭建迷茫、查重降重棘手等多重挑战。虎贲等考 AI 应需而生,作为一款基于前沿人工智能技术打造的论文写作辅助工具,以 “全流程覆盖、全场景适配、全维度专…

作者头像 李华
网站建设 2026/4/17 8:03:26

免安装体验!在线版Android Studio环境搭建方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个基于Web的Android开发沙箱环境,功能要求:1. 浏览器中运行Android Studio基础功能 2. 云端构建APK 3. 虚拟设备即时预览 4. 项目临时存储 5. 代码分…

作者头像 李华
网站建设 2026/4/18 23:06:13

零基础玩转树莓派:AI帮你写代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 为树莓派初学者设计一个LED控制入门项目,要求:1. 使用Python控制GPIO点亮LED;2. 提供详细的步骤说明和代码注释;3. 包含常见问题解答…

作者头像 李华