"new int(100)"做什么?

What does "new int(100)" do?

本文关键字:什么 new int      更新时间:2023-10-16

可能的重复项:
这是一个变量还是函数

我错误地使用了以下内容:

int *arr = new int(100);

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

int *arr = new int[100];

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

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

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

维基百科新(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)

更新

在当前的维基百科条目newdelete(C++)中,该示例被删除。

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

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

很多人不知道你可以将初始值设定项传递给new,有一个特定的成语应该更广泛地了解以避免使用memset

new int[100]();

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

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

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

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