int `*p = new int(5);` 和 `int *p = new int[5];` 有什么区别?

3

我只需要了解以下这些之间的区别:

int *p = new int[5];

并且

int *p = new int(5);

3
一个包含5个未初始化整数的数组 vs 一个初始值为5的整数 - Borgleader
1
区别在于你不应该在现代C++代码中使用它们中的任何一个。相反,应该使用std::vector或其他一些标准库容器。 - tadman
1个回答

10

创建一个由五个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 newoperator new[]new[] 分配一个数组必须使用 delete[] 删除,而 new 分配一个单独对象并且必须使用 delete 删除。如果您使用错误的运算符删除,则结果是未定义行为。当然,除非您是库实现者,否则你应该通常优先选择智能指针和库容器而不是newnew[]


这里的重要教训在于operator newoperator new[]之间的区别。operator new - tadman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接