向一系列指针及其替代方案的动态分配

Dynamic allocation to array of pointers and its alternatives

本文关键字:方案 动态分配 一系列 指针      更新时间:2023-10-16

使用新int分配数组的标准方法是:

 int* arr = new int[50];

以这种方式声明它时,将有连续的内存分配,并且变量堆栈中将有一个数组变量。

如果我想以50个不同的指针变量的形式声明它,以便每个指针都有不同的内存地址,而不一定是最明显的选择方式,就是这样:

int * arr[50];

但是,以这种方式,分配内存的命令/代码(即通过新的int)以及每种方式声明的缺点或优势是什么。

显而易见的方法是在所有元素上迭代并为它们分配内存:

for (int i = 0; i < 50; i++){
    arr[i] = new int;
}

非连续内存块的缺点将是缓存失误。您可以在此处阅读更多信息。

如何分配,在此答案中已经提到了;因此不重复。
对于单个int分配,您的下线是过度杀伤:

int* arr[50];  // all downsides only

您应该使用简单的整数:

int arr[50];

最好通过标准容器来利用设施,例如:

std::vector<int> vi;  // if the number of int-s are dynamic
std::array<int, 50> ai; // if the number of int-s are fixed

最后,从这个答案中,

"避免使用指针,直到无法...因此,只有在别无选择的情况下,经验法则才是使用指针。"