什么"新的int(100)"做?

时间:2012-12-10 09:14:14

标签: c++ new-operator

  

可能重复:
  is this a variable or function

我错误地使用了类似的东西:

int *arr = new int(100);

它通过编译,但我知道这是错误的。它应该是

int *arr = new int[100];

当我写错了编译器时编译器认为是什么?

4 个答案:

答案 0 :(得分:61)

第一行分配一个int并将其初始化为100int(100)视为构造函数调用。

由于这是一个标量分配,尝试访问arr[1]或使用delete[]释放内存会导致未定义的行为。

答案 1 :(得分:23)

Wikipedia new(C++)引用:

int *p_scalar = new int(5); //allocates an integer, set to 5. (same syntax as constructors)
int *p_array = new int[5];  //allocates an array of 5 adjacent integers. (undefined values)

更新

在当前的维基百科文章new and delete (C++)中,该示例已被删除。

此外,这是newnew[]的不太直观但完全可靠的C ++参考。

答案 2 :(得分:9)

它分配一个int类型的对象,并将其初始化为值100

很多人不知道你可以将初始值设定项传递给new,有一个特定的习惯用法应该更广为人知,以避免使用memset

new int[100]();

这将分配一个int数组并对其元素进行零初始化。

此外,您不应使用new的数组版本。永远。为此目的有std::vector

答案 3 :(得分:0)

第一个创建一个新的整数,将其初始化为值100并返回指向它的指针。

在C / C ++中,指向数组的指针和指向单个值的指针之间没有区别(指向数组的指针实际上只是指向其第一个元素的指针)。所以这是用一个元素创建数组的有效方法。