【问题标题】:Will new operator return NULL? [duplicate]new 运算符会返回 NULL 吗? [复制]
【发布时间】:2011-03-24 07:07:30
【问题描述】:

可能重复:
Will new return NULL in any case?

假设我有一个类 Car 并且我创建了一个对象

Car *newcar  = new Car();
if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
{
}

【问题讨论】:

    标签: c++ new-operator


    【解决方案1】:

    在符合标准的 C++ 实现中,没有。 new 的普通形式永远不会返回NULL;如果分配失败,会抛出std::bad_alloc异常(new (nothrow)表单不会抛出异常,分配失败会返回NULL)。

    在一些较旧的 C++ 编译器(尤其是在语言标准化之前发布的那些)或在显式禁用异常的情况下(例如,可能某些嵌入式系统的编译器),new 可能会在失败时返回 NULL .这样做的编译器不符合 C++ 标准。

    【讨论】:

    【解决方案2】:

    不,new 在分配失败时抛出 std::bad_alloc。如果您不希望出现异常,请改用new(std::nothrow) Car

    【讨论】:

      【解决方案3】:

      默认情况下,当 new 运算符失败时,C++ 会抛出 std::bad_alloc 异常。因此,除非您明确禁用异常使用,否则不需要检查 NULL。

      【讨论】:

      • ...如果您禁用异常使用,则该语言不再是 C++。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2022-11-19
      • 1970-01-01
      • 2011-10-18
      • 2023-03-03
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多