异常类 - what() 函数

Exception class - what() function

本文关键字:函数 what 异常      更新时间:2023-10-16

我目前正在研究我自己的从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++ 的实现细节。它在大多数其他实现中不存在。

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

直接从std::exception派生的一种选择是从<stdexcept>中预定义的异常之一派生,例如std::runtime_error。这些异常确实有构造函数采用字符串参数,并且已经以某种方式解决了双重异常问题。可能是通过不存储std::string.