C++ C++;捕获异常后执行清理的标准方法是什么?
假设我有一个从文件中读取的函数。读取文件时出错,我捕获到一个异常。例外并非致命的;我可以简单地要求用户输入正确的文件。但是为了询问用户这个问题,我可能必须退出抛出异常的函数。我在考虑简单地使用一个C++ C++;捕获异常后执行清理的标准方法是什么?,c++,exception,C++,Exception,假设我有一个从文件中读取的函数。读取文件时出错,我捕获到一个异常。例外并非致命的;我可以简单地要求用户输入正确的文件。但是为了询问用户这个问题,我可能必须退出抛出异常的函数。我在考虑简单地使用一个bool,如果一切顺利,它将返回true,如果出现问题,它将返回false。这是一种公认的做法,还是应该有一个标准 一个简单的尝试,用RAII来做 #include <iostream> #include <fstream> class FileReader{ std::
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;
}
#包括
#包括
类文件读取器{
std::ifstream文件\ u描述符;
公众:
文件阅读器();
~FileReader();
void readFromFile();
};
FileReader::FileReader():
文件描述符(std::ifstream(“test.txt”,std::ifstream::in)){
}
FileReader::~FileReader(){
文件_描述符.close();
}
void FileReader::readFromFile(){
std::字符串行;
而(std::getline(file_descriptor,line)){//这可以在try块中,以防文件读取出错
标准::cout
捕获异常后执行清理的标准方法是什么
惯用的方法是在析构函数中进行清理
例如,如果打开一个文件,将接收一个文件描述符(整数值),您应该在构造函数中打开,在成员变量中存储描述符,并在析构函数中进行清理,包括关闭文件。这种模式就是RAII习惯用法。使用RAII。不要过早捕获异常;只捕获必须执行操作的位置。这将是一个意见问题。没有任何方法可以解决dle这个和异常可能不是您想要使用的。异常应该是在异常情况下使用的,错误的文件名不是例外,用户经常输入错误的信息。@RichardCriten我不太确定如何在这种情况下应用RAII。您是说我应该允许在错误状态下读取文件,然后当我不这样做时若要使用资源,则抛出异常?RAII可能直接应用于文件本身,也可能不直接应用于文件本身,但在解析文件时创建的任何对象都应在出现故障时正确处理,RAII通常是处理该问题的最简单方法。“…读取文件时出错…”:我认为这意味着该文件已成功打开,但在读取/解析其内容时出现问题(可能在几次读取之后)。RAII用于文件对象和任何其他需要清理的资源,如缓冲区。在阅读您的评论后,我已使用代码示例编辑了我的原始问题。如果您有时间,我非常希望您对此进行输入