【发布时间】:2020-05-06 07:41:31
【问题描述】:
我偶然发现了一个涉及不同大小的数组声明的测验。我首先想到的是我需要通过new 命令使用动态分配,如下所示:
while(T--) {
int N;
cin >> N;
int *array = new int[N];
// Do something with 'array'
delete[] array;
}
但是,我看到其中一种解决方案允许以下情况:
while(T--) {
int N;
cin >> N;
int array[N];
// Do something with 'array'
}
经过一番研究,我读到 g++ 允许这样做,但它让我一直在思考,在哪些情况下需要使用动态分配?还是编译器将其翻译为动态分配?
包括删除功能。但是请注意,这里的问题与内存泄漏无关。
【问题讨论】:
-
第二个例子使用了variable-length array,它从来都不是C++的一部分。对于这种情况,请改用
std::vector(std::vector<int> array(N);)。 -
您的问题的直接答案应该是:不,它没有被弃用。尽管现代版本的 C++ 提供了许多简化内存所有权管理(智能指针)的功能,但通过直接调用
new OBJ来分配对象仍然是常见的做法。 -
对于其他对人们谈论内存泄漏的原因感到困惑的人,该问题已被编辑以纠正与问题无关的错误
-
@Mannoj 更喜欢使用术语动态和自动来堆和堆栈。这种情况很少见,但可以在没有堆和堆栈的情况下实现 C++。
-
我不确定这是否是个玩笑。 C++ 已经正式弃用了一些东西,但出于某种原因,它们确实倾向于非正式地继续存在。
标签: c++ arrays dynamic-memory-allocation static-memory-allocation