繁体   English   中英

2动态阵列初始化之间的区别

[英]difference between 2 dynamic array initilising

cin>>n; 

int * a;
a=new int[n];

int b[n];

我认为在这两种情况下,数组都是动态创建的(纠正我)。所以为什么我们不首先选择第二种情况,因为第二种情况更简单。

第二个在标准C ++中不起作用。 然而它确实在C中工作。有些编译器提供允许这样做的扩展(C ++),但它同样不是标准的。 C ++ 14将附带std :: dynarray,它基本上是第二种“方式”。

因为它有误导性。

int b[n]用于静态数组声明。 原则上在C ++中是不允许的(如果n不是常数),它只是编译器扩展,它可以为你将int b[n]转换为int *b = new int[n]

在这种情况下最好使用std :: vector,它也很短,但不会误导:

vector<int> b(n);

一个重要的区别是第一个在堆中分配内存,并且可以在所有程序中访问适当的引用。 应该释放一次不是引用(相应的delete调用)。

第二个在堆栈中分配它,你可以检查为什么在C ++ 0x中没有VLA? 这是针对VLA的主要抱怨之一。 退出当前块后,将释放此内存。

另一方面,严格来说,它们都不是动态数组(你不能动态添加/删除额外的元素)。 如果你想使用动态数组,我建议使用std::vector 虽然,更适合提供的示例,将使用std::array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM