【问题标题】:What is the difference between int `*p = new int(5);` and `int *p = new int[5];`int `*p = new int(5);` 和 `int *p = new int[5];` 有什么区别?
【发布时间】:2019-08-14 11:29:54
【问题描述】:

我只需要了解它们之间的区别是什么:

int *p = new int[5];

int *p = new int(5);

【问题讨论】:

  • 一个由 5 个未初始化整数组成的数组 vs 1 个初始化为 5 的整数
  • 不同之处在于您不应该在现代 C++ 代码中使用它们中的任何一个。而是使用std::vector 或其他类型的标准库容器。

标签: c++ dynamic-memory-allocation


【解决方案1】:

创建一个包含五个ints 的数组,并将指向该数组第一个元素的指针分配给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 and operator new[] 之间。 new[] 分配一个数组,必须delete[] 删除,而new 分配一个对象,必须用delete 删除。如果您使用错误的运算符删除,则会发生未定义的行为。当然,除非您是库实现者,否则您应该通常更喜欢智能指针和库容器,而不是 newnew[]

【讨论】:

  • 这里的重要教训是operator newoperator new[] 之间的区别。
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 2021-12-12
  • 2019-11-06
  • 2016-01-23
  • 2012-10-10
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多