使用或不使用“new”关键字声明 C++ 数组

use*_*612 2 c++ arrays

在 C++ 中,这有什么区别:

char example[10];
Run Code Online (Sandbox Code Playgroud)

和这个:

char* example = new char[10];
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都没有初始化数组的内容,而只是想获取分配给字符数组的内存中的 10 个字节。在这两种情况下,我打算使用 sprintf() 为它们分配一个字符串值,而无需中间步骤。

eer*_*ika 5

char example[10];
Run Code Online (Sandbox Code Playgroud)

example是一个 10 个字符的数组。根据上下文,它具有自动或静态存储。大小只能是编译时常量。该数组将被自动销毁并释放。

char* example = new char[10];
Run Code Online (Sandbox Code Playgroud)

example是一个指针。它不是一个数组。它指向动态存储中数组的第一个元素。动态数组的大小可以在运行时确定。该数组不会自动销毁和释放。如果不释放,内存就会泄漏。

动态分配通常比静态或自动分配慢。另一方面,可用于自动存储的内存量通常非常有限。

应避免使用裸露的拥有指针。最佳实践是使用智能指针或 RAII 容器,例如std::vector需要动态数组时。