开发者社区> 问答> 正文

C ++中不赞成使用“ new”和“ delete”吗?

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

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

展开
收起
保持可爱mmm 2020-02-09 14:08:21 625 0
1 条回答
写回答
取消 提交回答
  • 您显示的两个片段都不是惯用的现代C ++代码。

    newand delete(and new[]和delete[])在C ++中不被弃用,也永远不会。它们仍然是实例化动态分配对象的方法。但是,由于您必须始终将a new与delete(以及a new[]与delete[])进行匹配,因此最好将它们保存在(库)类中,以确保为您提供帮助。请参阅C ++程序员为什么要尽量减少使用“ new”?。

    您的第一个代码段使用“裸” new[],然后从不delete[]创建数组。那是个问题。std::vector在这里您需要的一切都很好。它将使用某种形式的new幕后花样(我将不深入介绍实现细节),但是您需要关心的是,它是一个动态数组,但更好,更安全。

    第二个片段使用“可变长度数组”(VLA),这是一些编译器还允许在C ++中作为扩展使用的C功能。与newVLA 不同,VLA本质上是在堆栈上分配的(资源非常有限)。但更重要的是,它们不是标准的C ++功能,应避免使用,因为它们不可移植。它们当然不能代替动态(即堆)分配。

    2020-02-09 14:08:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载