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

C++数组删除操作符语法

  •  7
  • raven  · 技术社区  · 16 年前

    我做了之后,说

    Foo* array = new Foo[N];

    我总是这样删除它

    delete[] array;

    然而,有时我会这样看:

    delete[N] array;

    由于它似乎在编译和运行(至少在msvc2005中),我想知道:

    7 回复  |  直到 16 年前
        1
  •  13
  •   Naveen    16 年前

    您可以检查此MSDN链接: delete[N] operator . 该值将被忽略。

    编辑 我在VC9上尝试了以下示例代码:

    int test()
    {
        std::cout<<"Test!!\n";
        return 10;
    }
    
    int main()
    {
        int* p = new int[10];
        delete[test()] p;
        return 0;
    };
    

    输出是:测试!!

    因此,对表达式求值,但忽略返回值。 至少可以说,我很惊讶,我想不出为什么需要这样做。

        2
  •  10
  •   Mike Seymour    16 年前

    delete [N] array 这是无效的。它没有在C++标准中定义:5.3.5节定义了删除表达式 delete expr 或 delete [] expr ,没有别的了。它不在gcc(版本4.1.2)上编译。至于它为什么用Visual C++编译:请询问Microsoft。

        3
  •  5
  •   laura    16 年前

    delete[] array;

        4
  •  5
  •   Mykola Golubyev    16 年前

    VisualStudio编译了很多它不应该编译的东西。

        5
  •  4
  •   sbi    16 年前

    正确的方法是 delete[] array; . 我甚至都不知道 delete[N] array; 将编译(我怀疑它是否应该)。

        6
  •  4
  •   Jerry Coffin    16 年前

    第二:回到C++的黑暗时代,你必须指定你正在删除的数组的大小,所以如果你使用了 x = new T[N] ,匹配的删除为 delete [N] x 长的 以前,但是一些编译器(特别是那些关心向后兼容古代代码的编译器)仍然允许它。

        7
  •  -2
  •   Nicholaz    16 年前

    如果它能工作,那就是一个非标准的扩展。

    delete [] array;   
    

    这是正确的形式。

    delete array;