代码之家  ›  专栏  ›  技术社区  ›  ckv

新运算符是否返回NULL[[副本]

  •  15
  • ckv  · 技术社区  · 14 年前


    Will new return NULL in any case?

    假设我有一辆高级车,我创建了一个对象

    Car *newcar  = new Car();
    if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
    {
    }
    
    3 回复  |  直到 7 年前
        1
  •  56
  •   James McNellis    14 年前

    new 不会再回来了 NULL ; 如果分配失败,则 std::bad_alloc new (nothrow) 表单不会抛出异常,并且会返回 无效的 如果分配失败)。

    对一些旧的C++编译器(特别是那些在语言标准化之前发布的编译器)或在异常被显式禁用的情况下(例如,嵌入式系统的一些编译器) 新的 可能会回来 一旦失败。这样做的编译器不符合C++标准。

        2
  •  12
  •   Cody Gray    5 年前

    不, new 投掷 std::bad_alloc 分配失败时。使用 new(std::nothrow) Car

        3
  •  3
  •   Karel Petranek    14 年前

    默认情况下,当新操作符失败时,C++抛出一个STD::BADYOLLC异常。因此,除非显式禁用异常用法,否则不需要检查NULL。