我正在派生我自己的异常,调用它MyException
,std::system_error
并已覆盖what()
以计算并返回我的消息。MyException
的初始值设定项列表不调用接受消息的 system_error 构造函数覆盖。
如果我抓住 aMyException
并将其复制到 astd::exception
调用iswhat()
的结果。这是有道理的。std::exception
nullptr
我的问题是,如果我确实使用了 system_exception 的构造函数,该构造函数在初始化时接收消息MyException
,是否指定 system_error 将获取消息的副本并拥有它并释放它?
我假设这将使 的std::exception
副本MyException
能够返回有效的what()
. 尽管我会因为每次MyExceptions
创建新的“什么”都需要计算而受到性能影响;只有在第一次调用 what() 时,我才能懒惰地计算它。
我有点担心what()
返回 achar*
而不是 a的 'what' 字符串的所有权const std::string&
。
代码是这样的(我还没有编译过):
class MyException : public std::system_error
{
std::string what_;
public:
MyException(int errorValue, const std::error_category& category)
: std::system_error(errorValue, category)
{}
char* what() const
{
what_ = "MyException: " + to_string(code().value());
return what_.c_str();
}
};
int main()
{
std::exception ex;
try
{
throw MyException(4, system_category());
}
catch( const MyException& e )
{
ex = e;
}
printf("what= %s", ex.what());
return 1;
}