动态内存分配创建数组相比于普通的元素分配有什么优势?
动态创建的数组通常可以比自动创建的数组更大,并且具有更长的生命周期。但与使用std::vector相比,两者都具有许多不利之处。
1) 动态内存分配允许在管理对象的生命周期时具有很大的灵活性。
2) 数组的大小也可以更自由地控制。
int x[100];
是固定大小的,无法扩展。它的生命周期与创建它的上下文相关,并且不能在不同的函数/方法之间传递。
int *x = new int[n]; ... delete[] x;
可以重新分配大小,因此可以调整大小,而且n不需要在编译时知道(所以您可以询问用户她需要多少个数字并创建该大小的数组)。正如@Neil Butterworth所指出的那样,这是在堆上创建数组,可以更大,而静态变量则在堆栈上创建数组。
std::vector
包装了很多这种神奇的重新分配代码,可能这是您应该在代码中使用的东西。
当你分配数组时,数组的大小必须在编译时给出。在这种情况下,大多数情况下,你要么分配更多的内存,要么分配更少的内存。
这就是动态内存分配帮助你的地方,因此你可以实际上只分配那些真正需要的内存块,并且当你完成内存管理时,可以释放内存。