gpt4 book ai didi

c++ - 异常类 - what() 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:40 27 4
gpt4 key购买 nike

我目前正在开发我自己的继承自 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异常(exception)。在尝试处理第一个异常时发生新的异常并不是那么好。

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

关于c++ - 异常类 - what() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48127473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com