RAII 资源管理
资源获取即初始化、析构函数自动释放、锁守卫 lock_guard
RAII 资源管理
RAII(Resource Acquisition Is Initialization) 是 C++ 最重要的设计哲学——用对象的生命周期自动管理资源。
学完本章你将: 理解 RAII 思想、析构函数保证释放、lock_guard 实战。
什么是 RAII
cpp
#include <iostream>
#include <fstream>
// RAII 包装文件操作
class File {
FILE *fp;
public:
File(const char *path, const char *mode) {
fp = fopen(path, mode); // 构造时获取资源
}
~File() {
if (fp) fclose(fp); // 析构时释放资源
std::cout << "文件已关闭\n";
}
void write(const char *s) { fprintf(fp, "%s", s); }
};
int main() {
{
File f("test.txt", "w");
f.write("Hello RAII\n");
} // f 离开作用域,析构函数自动调用 → 文件自动关闭!
// 不用写 fclose,不会忘记
return 0;
}
标准库中的 RAII
cpp
// 互斥锁自动释放
std::mutex mtx;
{
std::lock_guard<std::mutex> lock(mtx); // 构造时加锁
// ... 临界区 ...
} // 析构时自动解锁——永远不会忘
// unique_ptr 自动释放内存
{
auto p = std::make_unique<int>(42);
} // 自动 delete
// ifstream 自动关闭文件
{
std::ifstream f("data.txt");
// ... 读文件 ...
} // 自动关闭
💡 RAII 的核心: 资源获取就是初始化,资源释放就是析构。C++ 的析构函数保证即使抛出异常也会执行——资源永远不会泄漏。