gpt4 book ai didi

c++ - 自定义异常并不总是执行 what()

转载 作者:行者123 更新时间:2023-11-30 00:55:25 27 4
gpt4 key购买 nike

我开始使用异常并更精确地处理一些事件或错误,我创建了我自己的异常类型,派生自 std::exception。到目前为止一切顺利,但我只是注意到有时 what() 方法不打印任何内容。异常被很好地抛出并被捕获,但是通过方法 what() 正常打印的解释消息并不总是显示在屏幕上。它可以使用与之前结束打印消息的执行相同的参数发生,并且似乎是完全随机的。

这是我的异常(exception)情况:

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();
}

“error file catch”总是打印出来,但有时会打印“Error with file...”。知道我做错了什么吗?谢谢

最佳答案

您正在返回指向临时 std::string 内容的指针。

关于c++ - 自定义异常并不总是执行 what(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12570819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com