面试题答案
一键面试异常处理策略说明
- RAII原则:RAII(Resource Acquisition Is Initialization)即资源获取即初始化,在对象构造时获取资源,在对象析构时释放资源。
- 异常处理:当文件打开失败时,抛出异常。调用者可以捕获这个异常并处理错误信息。这样既保证了资源在对象析构时正确释放,又不破坏RAII原则。
代码实现
#include <iostream>
#include <fstream>
#include <stdexcept>
class FileRAII {
public:
FileRAII(const std::string& filename) : file(filename) {
if (!file.is_open()) {
throw std::runtime_error("Failed to open file: " + filename);
}
}
~FileRAII() {
if (file.is_open()) {
file.close();
}
}
std::ifstream& getFile() {
return file;
}
private:
std::ifstream file;
};
int main() {
try {
FileRAII file("nonexistent_file.txt");
std::ifstream& f = file.getFile();
// 进行文件操作
} catch (const std::runtime_error& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
在上述代码中:
FileRAII
类的构造函数尝试打开文件,如果打开失败,抛出std::runtime_error
异常,包含失败的文件名信息。- 析构函数负责关闭文件,保证资源的正确释放。
main
函数中,使用try - catch
块捕获异常,并输出错误信息。这样在文件打开失败时,能合理处理异常并向调用者反馈错误,同时遵循RAII原则。