可能重复:
这是一个变量还是函数
我错误地使用了类似的东西:
int *arr = new int(100);
它通过了编译,但我知道这是错误的。它应该是
int *arr = new int[100];
当我写错了编译器会怎么想?
可能重复:
这是一个变量还是函数
我错误地使用了类似的东西:
int *arr = new int(100);
它通过了编译,但我知道这是错误的。它应该是
int *arr = new int[100];
当我写错了编译器会怎么想?
第一行分配一个单int
并将其初始化为100
. 将int(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)
在当前的 Wikipedia 文章new
和delete
(C++)中,该示例已被删除。
它分配一个类型的对象int
并将其初始化为 value 100
。
很多人不知道您可以将初始化程序传递给new
,有一个特殊的习惯用法应该更广为人知,以避免使用memset
:
new int[100]();
这将分配一个数组int
并对其元素进行零初始化。
此外,您不应该使用数组版本的new
. 曾经。就是std::vector
为了这个目的。
第一个创建一个新的整数,将其初始化为值 100 并返回一个指向它的指针。
在 C/C++ 中,指向数组的指针和指向单个值的指针之间没有区别(指向数组的指针实际上只是指向其第一个元素的指针)。因此,这是创建具有一个元素的数组的有效方法。