第一种情况:
void func(int size)
{
int arr[size];
for(int i=0;i<size;i++)
arr[i]=1;
for(int i=0;i<size;i++)
cout<<arr[i];
}
int main()
{
func(6);
return 0;
}
or,
第二个案例
void func(int size)
{
int *ptr = new int[size];
for(int i=0;i<size;i++)
ptr[i]=1;
delete[] ptr;
}
查询:
两者之间有什么区别(这里是第一种情况是动态分配)?
哪个最好用(因为元素是6,首先是最佳选择)?
第一种情况是否称为动态堆栈分配?
答案 0 :(得分:5)
第一个不是C ++ - 当前标准(C ++ 11)不允许使用可变长度数组 - 它可能是C ++ 14但尚未发布。如果你的编译器编译得很好,那么它只是一个编译器扩展:如果你使用GCC,用-pedantic-errors
编译它,你会看到错误。
第二个是一个糟糕的解决方案:任何资源都应该包装在资源管理类中,通常称为RAII类。让它们像那样开放是一个危险的想法。在这个网站上搜索RAII,你会看到很多主题。
有一个更好的解决方案:使用std::vector<int>
。
答案 1 :(得分:1)
两者都完全相同。唯一的区别是在VLA(可变长度数组)中,编译器负责分配,解除分配等。
因此,VLA简化了程序的存储管理,因为一些需要手动使用new和delete的用法可以用VLA代替
请注意,两者都使用堆段进行内存分配
阅读本文:http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444
好吧,我建议您使用具有大量功能的STL矢量类,并且不会因为这些问题而烦恼,并且很容易相处。
这是:http://www.cplusplus.com/reference/vector/vector/