我目前正在开发自己的异常类,该类继承自std::exception
,我不确定我是否应该自己做what()
或者只是打电话std::exception("message")
在我的类构造函数中。
这是我当前的代码:
FilterException::FilterException(const char* message, int num) noexcept :
error_message(message), error_number(num) {}
const char* FilterException::what() const noexcept
{
return error_message.c_str();
}
FilterException::~FilterException() noexcept
{
}
int FilterException::getErrorNumber() const noexcept
{
return error_number;
}
所以,我的问题是,我应该像这样保留它,还是对构造函数进行更改并摆脱what()
?
首先,std::exception("message")
构造函数是 VC++ 的实现细节。它在大多数其他实现中不存在。
将什么消息存储在std::string
乍一看似乎很方便,但它为内存不足的情况增加了一个极端情况:复制字符串might结果是bad_alloc
例外。在尝试处理第一个异常时发生新的异常并不是那么好。
直接派生的一种选择std::exception http://en.cppreference.com/w/cpp/error/exception/exception是从预定义的异常之一派生而来<stdexcept> http://en.cppreference.com/w/cpp/error/exception, 例如std::runtime_error http://en.cppreference.com/w/cpp/error/runtime_error。这些例外情况do让构造函数接受字符串参数,并且已经以某种方式解决了双异常问题。大概是由not存储一个std::string
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)