首页 > 后端开发 > C++ > 正文

您的 C 编译器是否正确处理'new”运算符异常?

Linda Hamilton
发布: 2024-11-19 05:33:02
原创
796 人浏览过

Does Your C   Compiler Correctly Handle `new` Operator Exceptions?

新的抛出异常:C 标准合规性检查

C 标准要求 new 运算符在以下情况下抛出 std::bad_alloc 异常:内存分配失败。然而,人们对某些编译器(尤其是 VC6)在这方面的行为表示担忧。

VC6:打破标准

证实了谣言,VC6 表现出非- 合规行为。当遇到分配失败时,它不会抛出异常,而是返回 0(或 NULL)值。这种与标准的偏差给开发人员带来了潜在的挑战,因为它需要在每次新调用后进行显式空检查,从而导致代码美观问题。

VC6 的自定义解决方法

为了缓解 VC6 中的此问题,Microsoft 提供了一种涉及自定义新处理程序的解决方法。此解决方案通过异常处理补充了默认行为。

较新 MSVC 编译器中的变量行为

在 7.0 版本及以上的 MSVC 编译器中,new 的行为更加复杂。这些编译器可能会根据特定规则(包括与 nothrownew.obj 对象文件的链接)默认抛出或不抛出行为。

MSVC 8.0 及更高版本中的一致性

随着MSVC 8.0(VS2005)的发布,采用了更加一致的方法。此编译器始终默认抛出新异常,除非显式链接到 nothrownew.obj。

使用 std::nothrow 实现非抛出行为

开发人员可以显式请求新的异常返回 0 而不是使用 std::nothrow 参数抛出异常。这允许向后兼容为 VC6 行为编写的现有代码。

通过了解这些细微差别并实施适当的解决方法,开发人员可以确保他们的 C 代码遵守标准,无论他们使用什么编译器。

以上是您的 C 编译器是否正确处理'new”运算符异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板