异常类 - what()函数

时间:2018-01-06 12:45:00

标签: c++ exception error-handling

我目前正在处理自己的继承自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()

1 个答案:

答案 0 :(得分:7)

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

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

直接从clue派生的一个选项是从std::exception中的一个预定义例外派生,例如<stdexcept>。这些异常有构造函数采用字符串参数,并已经以某种方式解决了双异常问题。可能是存储std::string