gpt4 book ai didi

c++ - 'new' 和 'delete' 在 C++ 中被弃用了吗?

转载 作者:行者123 更新时间:2023-12-01 08:21:35 24 4
gpt4 key购买 nike

我偶然发现了一个涉及不同大小数组声明的测验。我想到的第一件事是我需要对 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++ 允许这样做,但它让我一直在思考,在哪些情况下有必要使用动态分配?还是编译器将其翻译为动态分配?

包括删除功能。但是请注意,这里的问题与内存泄漏无关。

最佳答案

好吧,对于初学者来说,new/delete不会被弃用。

不过,在您的具体情况下,它们不是唯一的解决方案。你选择什么取决于你的“用数组做某事”评论下隐藏的内容。

您的第二个示例使用非标准 VLA 扩展,该扩展尝试将数组放入堆栈中。这有一定的限制 - 即有限的大小和数组超出范围后无法使用此内存。您无法将其移出,它会在堆栈展开后“消失”。

因此,如果您的唯一目标是进行本地计算,然后将数据扔掉,它实际上可能会正常工作。但是,更健壮的方法是动态分配内存,最好使用 std::vector .这样,您就可以根据运行时值(这就是我们一直以来的目标)为您需要的元素创建空间,但它也可以很好地清理自己,您可以将其移出如果您想保留内存供以后使用,请使用此范围。

盘旋回到起点,vector可能会使用 new更深几层,但你不应该担心,因为它呈现的界面要好得多。从这个意义上说,使用 newdelete可以认为是气馁。

关于c++ - 'new' 和 'delete' 在 C++ 中被弃用了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59820879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com