smi*_*997 4 c++ error-handling exception
我目前正在处理我自己的继承的异常类,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;
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题,我应该像这样离开它,还是在构造函数中做出改变并摆脱what()
?
首先,std::exception("message")
构造函数是VC++的实现细节.它在大多数其他实现中不存在.
首先将what-message存储在一个std::string
看起来很方便,但它为低内存情况添加了一个极端情况:复制字符串可能会导致bad_alloc
异常.并且在尝试处理第一个异常时发生新异常并不是那么好.
一个选项,直接从推导std::exception
是代替从预定义的例外之一导出<stdexcept>
,例如std::runtime_error
.这些异常确实有构造函数采用字符串参数,并已经以某种方式解决了双异常问题.可能是因为没有存储std::string
.