我试图理解为什么我们必须在C ++中使用 new 运算符。我写过短程序:
int N;
std::cin >> N;
int tab[N];
for (int i = 0; i < N; i++)
tab[i] = i + 1;
for (int i = 0; i < N; i++)
std::cout << "tab[" << i << "] = " << tab[i] << std::endl;
此程序正常运行。我在C中使用此算法注意到的相同行为(而不是malloc()函数)。
答案 0 :(得分:5)
您正在使用可变长度数组,这在标准C ++中不可用。然而,它是C99的一部分,并且一些C ++编译器将其作为扩展提供。请参阅Why aren't variable-length arrays part of the C++ standard?。
要在标准C ++中获得类似的行为,或者使用比堆栈空间允许的更大的数组,必须使用new[]
。
当然,使用标准库容器(例如std::vector
)可以为您管理内存,这是一个更好的主意。
答案 1 :(得分:1)
您的示例不是有效的C ++代码。如果它与您的编译器一起编译,那必须是因为您的编译器支持可变长度数组作为该语言的扩展。如果在标准兼容模式下编译,则应该出错。因此,当您要编写符合标准的代码时,需要new[]
来创建可变大小的数组。
如果您希望阵列的使用寿命超过当前功能的使用寿命,或者您不希望其大小受可用堆栈空间的限制,则还需要它。