我开始使用异常并更精确地处理一些事件或错误,我创建了自己的异常类型,它从std::exception
. 到目前为止一切顺利,但我刚刚注意到有时该方法what()
不会打印任何内容。异常被很好地抛出和捕获,但该方法正常打印的解释消息what()
并不总是显示在屏幕上。它可能发生在与之前结束打印消息的执行相同的参数下,并且似乎是完全随机的。
这是我的例外:
class MyException : public std::exception
{
public:
MyException() throw() {}
~MyException() throw() {}
virtual const char *what() const throw()
{
return "general exception\n";
}
};
class FileError : public MyException
{
public:
FileError(std::string nFileName) : MyException(), fileName(nFileName) { }
~FileError() throw (){ }
virtual const char *what()
{
std::ostringstream oss;
oss << "Error with file : \"" << fileName << "\"." << std::endl;
return (oss.str()).c_str();
}
protected:
std::string fileName;
};
以及引起我问题的上下文:
try
{
QFile sourceFile(sourceFileName);
if(!sourceFile.open(QIODevice::ReadOnly))
throw FileError(sourceFileName.toStdString());
sourceFile.close();
}
catch(FileError &e)
{
std::cout << "error file catch " << std::endl;
std::cout << e.what();
terminate();
}
“错误文件捕获”总是打印,但有时“文件错误......”。知道我做错了什么吗?谢谢