【问题标题】:Dynamic memory allocation in C++ require the new operator new?C++ 中的动态内存分配需要 new 运算符 new?
【发布时间】:2011-07-28 23:20:38
【问题描述】:
int d;
cin >> d;
int asdf[d];
这被认为是动态内存分配吗?根据http://www.cplusplus.com/doc/tutorial/dynamic/,似乎我什至不能编译它,因为不使用 new 运算符的数组只能声明为常量大小,也许我读错了。 (我正在使用带有 GNU CCC 编译器的 CodeBlocks)
和有什么区别
int d;
int *asdf;
cin >> d;
asdf = new int[d];
唯一的区别是使用新创建的数组直到它被删除,而第一个数组在你离开作用域后立即被释放?
【问题讨论】:
标签:
c++
memory
dynamic
new-operator
【解决方案1】:
int x[n]; 是一个可变长度数组 (VLA),它具有自动存储持续时间(即“在堆栈上”)。它在 C89 或 C++98/03 中无效,但它是在 C99 中引入的,通常作为扩展提供,例如在 GCC 中。
该功能也可以在某些平台上使用非标准的alloca() 函数来模仿,该函数在 VLA 普及之前就已使用。
【解决方案2】:
第一种方法分配的内存来自分配给应用程序的堆栈。当您使用 new 时,内存是从堆中分配的,堆可以提供比从堆栈中获得的足够多的内存。但是要使用 new 你的变量必须是与你的数组相同类型的指针。指针变量保存第一个内存单元的地址。 int * a = 新的 int[x];将保存 x 个内存单元,如果您在程序仍在运行时专门删除指针,将被释放。