作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果在我的代码中我有一个
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/
我是一名优秀的程序员,十分优秀!