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

use*_*952 0 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,
Run Code Online (Sandbox Code Playgroud)

第二种情况

void func(int size)
{
  int *ptr = new int[size];

  for(int i=0;i<size;i++)
    ptr[i]=1;

  delete[] ptr;
}
Run Code Online (Sandbox Code Playgroud)

查询:

两者之间有什么区别(这是第一种情况下的动态分配)?

哪个最好用(因为元素是6,首先是最好的选择)?

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

Naw*_*waz 5

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

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

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