在 C++ 中,资源获取即初始化(RAII, Resource Acquisition Is Initialization)是一种管理资源的编程惯用法。其核心思想是将资源的获取和释放绑定到对象的生命周期中。具体来说:
-
资源获取:
- 在对象构造时获取资源,比如内存、文件句柄、网络连接等。
- 将资源的句柄或指针保存在对象的成员变量中。
-
资源释放:
- 在对象析构时释放资源。
- 利用析构函数自动清理资源,避免资源泄漏。
这种方法的好处是利用 C++ 的范围管理机制自动控制资源的生命周期,减少手动管理资源的复杂性和出错概率。
示例
#include <iostream>
#include <fstream>class FileHandler {
public:FileHandler(const std::string& filename) {file.open(filename);if (!file.is_open()) {throw std::runtime_error("Unable to open file");}}~FileHandler() {if (file.is_open()) {file.close();}}// 其他成员函数private:std::fstream file;
};int main() {try {FileHandler fh("example.txt");// 使用文件} catch (const std::exception& e) {std::cerr << e.what() << std::endl;}// 这里析构函数会自动关闭文件return 0;
}
在这个例子中,FileHandler
类的构造函数负责打开文件,而析构函数负责关闭文件。这样,FileHandler
对象的生命周期结束时,资源会被自动释放。