[英]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.