我只需要了解以下这些之间的区别:
int *p = new int[5];
并且
int *p = new int(5);
我只需要了解以下这些之间的区别:
int *p = new int[5];
并且
int *p = new int(5);
创建一个由五个int
组成的数组,并将指向该数组第一个元素的指针分配给p
。该数组中的整数都没有被初始化:
创建一个由5个未初始化的整型变量组成的数组,将指向该数组第一个元素的指针赋值给p
。
int *p = new int[5]; // a pointer to an array of 5 integers
另一个创建一个单独的int
,并将该int
的指针分配给p
。这个整数被初始化为5
:
int *p = new int(5); // a pointer to an int
正如 tadman 在他的评论中指出的那样,本质上区别在于 operator new
和 operator new[]
。 new[]
分配一个数组必须使用 delete[]
删除,而 new
分配一个单独对象并且必须使用 delete
删除。如果您使用错误的运算符删除,则结果是未定义行为。当然,除非您是库实现者,否则你应该通常优先选择智能指针和库容器而不是new
和new[]
。
std::vector
或其他一些标准库容器。 - tadman