C++ 中给定的两行动态内存分配有什么区别?他们都创建 10 个大小的数组吗?

What is the difference between given two lines of dynamic memory allocation in C++ ? Do they both create 10 sized array?

int *arr = new int(10);

int *arr = new int[10];

是c++动态内存分配的代码。 但是我不明白这两者有什么区别。

int *arr = new int(10); 为单个整数分配堆内存,初始化为 10。

int *arr = new int[10]; 为 10 个整数的数组分配堆内存,其中 none 被初始化为任何特定值。

记住:( ){ }主要用于声明中的initialization。而 [ ] 主要是一个索引运算符。因此,在第一条语句中,您试图分配一个 int 内存,并将 10 作为初始值。在第二条语句中,您试图分配一个没有默认初始化的 10 int 块数组。

举个简单的例子,说说栈上发生的事情

int x(10)
这通常意味着将值分配给名为 x.

int

int x[10]
这通常意味着创建一个名为 x 的包含 10 个元素的数组。

所以,当谈到动态内存时,也是一样的。

int* x=new int(10)
这将在堆上创建一个整数并为其分配值 10。

int* x=new int[10]
这将在堆上创建一个包含 10 个整数的数组。