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

Yuv*_*har 1 c++ new-operator dynamic-memory-allocation

int *arr = new int(10);

int *arr = new int[10];
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*nch 5

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

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


Age*_*t_A 5

举个简单的例子,让我们来谈谈堆栈上发生了什么。

int x(10)
这通常意味着为int命名的x.

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

因此,当涉及到动态内存时,情况是一样的。

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

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

  • 方便阅读:[为什么在 C++ 内存管理中,术语“自动”和“动态”比术语“堆栈”和“堆”更受欢迎?](/sf/ask/642724771/ -terms-automatic-and-dynamic-preferred-over-the-terms-stack-and) (2认同)