首页 >后端开发 >C++ >在 C 中 `new` 总是抛出 `std::bad_alloc` 吗?

在 C 中 `new` 总是抛出 `std::bad_alloc` 吗?

Barbara Streisand
Barbara Streisand原创
2024-11-17 08:50:03628浏览

Does `new` Always Throw `std::bad_alloc` in C  ?

真正的异常:超出 C 内存管理规范

与 C 标准相反,据报道,某些编译器,例如VC6,偏离 new 分配失败时返回 std::bad_alloc 异常的预期行为内存。

通常,当 new 无法获取请求的内存时,它会触发 std::bad_alloc 异常,遵循既定的 C 标准。然而,对于 VC6,采取了另一种方法。

据报道,VC6 在内存分配失败时返回 0(或 NULL),而不是返回异常。这种行为与标准不同,可能会导致代码混乱和意外结果。

为了解决这个问题,Microsoft 引入了一个自定义的新处理程序作为推荐的解决方案。然而,在 Visual C 7.0 和 7.1(VS2002 和 VS2003)中,一组复杂的规则决定了 new 是否以不抛出或抛出的方式运行。

随着 Visual C 8.0 (VS2005) 的发布,微软通过执行一致的政策解决了这个问题。在此版本中,new 始终默认抛出异常,除非显式与 nothrownew.obj 对象文件链接。

对于使用为 VC6 设计的旧代码的开发人员,可以利用 std::nothrow 参数模仿该编译器中 new 的行为。通过指定 new(std::nothrow),可以机械地更改代码,使其在不同的编译器中具有类似的功能,从而无需彻底修改现有的错误处理机制。

以上是在 C 中 `new` 总是抛出 `std::bad_alloc` 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn