gpt4 book ai didi

c++ - 如果 map.insert 失败,如何在不使用 bad_alloc 的情况下检查其失败

转载 作者:太空狗 更新时间:2023-10-29 20:29:41 27 4
gpt4 key购买 nike

如果在我的代码中我有一个

class A;
A ob;
pair<map<int,A>::iterator,bool> ret;
ret=map.insert(pair<int,A>(1,ob));

如果map因为内存不足插入ob失败,会抛出bad_alloc但是有没有其他方法可以检查插入是否失败,因为我有不使用命名空间和异常处理的限制。我们不能使用某种 NULL 指针比较语句吗?

最佳答案

标准库通过抛出 std::bad_alloc 报告分配内存失败。虽然您可以使用 new(nothrow) 来解决这个问题,但您不能使用标准库类来解决这个问题。

异常处理是C++的一部分;它不是 C++ 的可选部分。异常是处理错误条件的标准 C++ 方法。我知道您在一个不允许您捕获异常的环境中工作,但是您必须接受您在一个不允许您使用所有 C++ 的环境中工作。因此,您可以做的事情会受到限制。

应该注意的是,除非您使用的是自定义分配器,否则从“无法分配”错误中恢复不太可能很容易实现。无法分配内存只会因为您的应用程序内存不足而发生。在那种情况下,抛出异常即可;由于您不使用异常,它将转义 main 并导致您的程序崩溃。这正是您想要发生的事情。

如果您确实有办法在可分配地址空间用完时幸存下来,那么如果您不能捕获异常,您将无能为力。 C++ 标准库类旨在与 C++ 一起工作,这意味着它的全部。包括异常(exception)情况。

关于c++ - 如果 map.insert 失败,如何在不使用 bad_alloc 的情况下检查其失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258396/

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