gpt4 book ai didi

c++ - 为什么 boost::diagnostic_information 崩溃了以及如何修复它?

转载 作者:行者123 更新时间:2023-11-30 05:05:06 27 4
gpt4 key购买 nike

我尝试使用 boost::exception 但遇到了麻烦。我写了以下代码:

struct BaseExceptionXXX : public virtual std::exception, public virtual boost::exception
{
public:
BaseExceptionXXX()
{ };
virtual ~BaseExceptionXXX() {};

BaseExceptionXXX(char const* const message)
: std::exception(message)
{ }

BaseExceptionXXX(const std::exception& e)
: std::exception(e)
{ }

BaseExceptionXXX(const BaseException& e)
: std::exception(e)
, boost::exception(e)
{ }

bool IsEmpty() const
{
const std::string what_err = std::exception::what();
return (what_err.empty() && boost::get_error_info<UserErrorInfo>(*this) == nullptr);
}

const char* what() const throw() override
{
return boost::diagnostic_information(*this).c_str(); //<-- crash here
}
};


int main()
{
std::string exception_description;

try
{
BOOST_THROW_EXCEPTION(BaseExceptionXXX("hello exception"));
}
catch (BaseExceptionXXX& ex)
{
exception_description = ex.what(); //<-- crash here
}
}

但是它在函数中崩溃了:boost::diagnostic_information(*this)。崩溃原因:堆栈溢出

为什么会发生以及如何以正确的方式使用 boost::exception?

boost 版本 - 1.66

MSVS2017 版本 - 15.5.5

最佳答案

由于无限递归,您正在导致堆栈溢出。在你的 what() 实现中你写:

const char* what() const throw() override
{
return boost::diagnostic_information(*this).c_str(); //<-- crash here
}

但是,收集到的diagnostic_information 的关键部分很明显是来自异常的what() 消息。因此,what() 将递归调用自身。

关于c++ - 为什么 boost::diagnostic_information 崩溃了以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48572433/

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