0

第一种情况:

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

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

4

2 回答 2

5

第一个不是 C++——当前标准 (C++11) 不允许变长数组——它可能是 C++14,但尚未发布。如果你的编译器编译得很好,那么它只是一个编译器扩展:如果你使用的是 GCC,用 编译它-pedantic-errors,你会看到错误。

第二个是一个糟糕的解决方案:任何资源都应该包装在一个资源管理类中,通常称为 RAII 类。让它们像那样敞开是一个危险的想法。在这个网站上搜索 RAII,你会看到很多关于它的主题。

有一个优越的解决方案:使用std::vector<int>.

于 2013-11-04T05:56:47.210 回答
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/

于 2013-11-04T06:34:35.127 回答