为什么我们必须使用新的运营商?

时间:2014-05-14 18:28:19

标签: c++ new-operator

我试图理解为什么我们必须在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()函数)。

2 个答案:

答案 0 :(得分:5)

您正在使用可变长度数组,这在标准C ++中不可用。然而,它是C99的一部分,并且一些C ++编译器将其作为扩展提供。请参阅Why aren't variable-length arrays part of the C++ standard?

要在标准C ++中获得类似的行为,或者使用比堆栈空间允许的更大的数组,必须使用new[]

当然,使用标准库容器(例如std::vector)可以为您管理内存,这是一个更好的主意。

答案 1 :(得分:1)

您的示例不是有效的C ++代码。如果它与您的编译器一起编译,那必须是因为您的编译器支持可变长度数组作为该语言的扩展。如果在标准兼容模式下编译,则应该出错。因此,当您要编写符合标准的代码时,需要new[]来创建可变大小的数组。

如果您希望阵列的使用寿命超过当前功能的使用寿命,或者您不希望其大小受可用堆栈空间的限制,则还需要它。