【发布时间】:2019-11-25 00:35:09
【问题描述】:
我对动态内存分配有点困惑,我希望有人能帮我解决这个问题。
假设我们有一个程序:
int length = 0;
cout << "Enter the size of the array" << endl;
cin >> length;
cin.ignore();
int numbers[length];
这不还是动态内存分配吗 因为数组大小是在运行时定义的 用户输入指定长度后?
vs 使用:
int numQuestions = 0;
cout << "How many questions would you like to add?" << endl;
cin >> numQuestions;
cin.ignore();
Question *newQuestions = new Question[numQuestions];
【问题讨论】:
-
第一个示例不是标准 C++,它没有可变长度数组,因此您的问题没有实际意义。您正在使用编译器扩展。
-
具有运行时限制的数组在 n3639 中被提议到 C++14 中,但被否决了,因此可能需要一些时间才能有人重新提出该提议。
-
@ÖöTiib - 我怀疑它会复活。 VLA 在 C99 中是可选的,并于 2011 年正式从 C 标准中删除 - 原因是基于评估的 C 中的缺点。这削弱了基于 C 兼容性的任何理由。此外,C 的 VLA 的大部分缺点也适用于 C++。该功能也不能很好地与 C++ 对象模型(构造函数、析构函数等)配合使用,并且 C++ 还提供了替代方案(如标准容器),这些替代方案被认为优于在 C++ 中使用任何原始数组构造。
标签: c++ pointers dynamic-memory-allocation