gpt4 book ai didi

c++ - 处理返回 std::string 的函数中的异常

转载 作者:行者123 更新时间:2023-11-30 02:40:20 25 4
gpt4 key购买 nike

如何处理此函数中的std::bad_alloc异常:

std::string GetString()
{
std::string str;
return str;
}

因为任何 STL 构造函数都可以抛出 bad_alloc,我们必须这样做:

std::string GetString()
{
try
{
std::string str;
return str;
}
catch(std::bad_alloc&)
{
return ""; // Constructs temporary std::string and returns. Could throw !
}
}

catch block 仍然不安全。

我只是想让这个函数成为异常证明。

最佳答案

虽然,(我认为)标准不能保证,但大多数(可能是所有)std::string 实现不会为空/短字符串分配内存(如@所述BoBTFish)。因此,您的解决方案就是“异常证明”。我只是建议,实际返回一个默认构造的字符串而不是 ""

但是,您应该问自己的基本问题是 bad_alloc 是否符合您的预期,因为您可能正在尝试构建一个非常大的字符串,或者如果它实际上表明您的系统完全用完了内存:

如果分配失败,因为您试图创建一个包含几百万个字符的字符串,那么构造一个较短/空的错误字符串可能不会抛出另一个异常,这可以看作是正确的错误处理形式。

如果它失败了,因为你的程序/系统完全耗尽了内存,你不能在本地处理它(你不能释放任何其他内存)因此你可能也不应该试图隐藏那个错误,因为它肯定会不久之后再次出现。因此,虽然返回一个空字符串或短字符串可能仍然有效,但我认为没有理由首先在您的函数中捕获该异常。

关于c++ - 处理返回 std::string 的函数中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29031363/

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