异常类 - what()函数

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

Bo *_*son 7

首先,std::exception("message")构造函数是VC++的实现细节.它在大多数其他实现中不存在.

首先将what-message存储在一个std::string看起来很方便,但它为低内存情况添加了一个极端情况:复制字符串可能会导致bad_alloc异常.并且在尝试处理第一个异常时发生新异常并不是那么好.

一个选项,直接从推导std::exception是代替从预定义的例外之一导出<stdexcept>,例如std::runtime_error.这些异常确实有构造函数采用字符串参数,并已经以某种方式解决了双异常问题.可能是因为没有存储std::string.