在C++中静态数组和动态数组有什么区别?
我必须为我的类做一个赋值,它告诉我不要使用静态数组,只使用动态数组。我在书里和网上都看过了,但我似乎不明白。
我认为静态是在编译时创建的,而动态是在运行时创建的,但我可能将其与内存分配搞混了。
你能解释一下C++中静态数组和动态数组的区别吗?
发布于 2010-04-20 10:08:22
本地数组是在堆栈上创建的,并且具有自动存储持续时间--您不需要手动管理内存,但是当函数结束时,它们会被销毁。它们必须有一个固定的大小:
int foo[10];
使用operator new[]
创建的数组具有动态存储持续时间,并存储在堆上(从技术上讲,这是“空闲存储”)。它们可以有任何大小,但您需要自己分配和释放它们,因为它们不是堆栈框架的一部分:
int* foo = new int[10];
delete[] foo;
发布于 2010-04-20 10:11:30
我认为你的类中使用的语义是令人困惑的。“静态”的意思可能仅仅是“固定大小”,而“动态”的意思可能是“可变大小”。在这种情况下,固定大小的数组可能如下所示:
int x[10];
而“动态”结构可以是允许在运行时增加或减少底层存储的任何类型的结构。大多数情况下,C++标准库中的std::vector
类就足够了。像这样使用它:
std::vector<int> x(10); // this starts with 10 elements, but the vector can be resized.
std::vector
定义了operator[]
,因此您可以使用与数组相同的语义。
发布于 2010-04-20 10:08:36
静态数组在编译时分配内存,内存在堆栈上分配。然而,动态数组在运行时被分配内存,内存是从堆中分配的。
int arr[] = { 1, 3, 4 }; // static integer array.
int* arr = new int[3]; // dynamic integer array.
https://stackoverflow.com/questions/2672085
复制相似问题