这是C ++中最好的分配方式

时间:2013-11-04 05:55:49

标签: c++ memory

第一种情况:

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,首先是最佳选择)?

第一种情况是否称为动态堆栈分配?

2 个答案:

答案 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/