C++ 捕获异常后进行清理的标准方法是什么?



假设我有一个从文件中读取的函数。从文件中读取时出现问题,我发现了异常。例外不是致命的;我可以简单地要求用户输入正确的文件。但是为了询问用户这一点,我可能不得不退出引发异常的函数。我在考虑简单地做一个bool,这样它就会返回true如果一切顺利,或者如果出现问题false。这是一种公认的做法,还是有关于如何做的标准?

一个简单的尝试来做 RAII

#include <iostream>
#include <fstream>
class FileReader{
std::ifstream file_descriptor;
public:
FileReader();
~FileReader();
void readFromFile();
};
FileReader::FileReader() :
file_descriptor(std::ifstream("test.txt",std::ifstream::in)) {
}
FileReader::~FileReader() {
file_descriptor.close();
}
void FileReader::readFromFile() {
std::string line;
while (std::getline(file_descriptor, line)){ //this can then be in a try block in case file reading goes wrong
std::cout << line << std::endl;
}
}
int main() {
FileReader fileReader;
fileReader.readFromFile();
std::cout << "Hello, World!" << std::endl;
return 0;
}

这是你们的意思吗?然而,我确实觉得我在那里有析构函数违反了三/五的规则。还是自动生成的析构函数就足够了?

捕获异常后进行清理的标准方法是什么?

惯用的方法是在析构函数中进行清理。

例如,如果打开文件并接收文件描述符(整数值(,则应在构造函数中打开,将描述符存储在成员变量中,并在析构函数中执行清理,包括关闭文件。这种模式是 RAII 习语。

最新更新