动态声明数组后面的静态声明

时间:2012-09-18 13:20:01

标签: c++ static new-operator

我希望在函数中有一个数组,当我退出函数时它会保留其值,例如 -

 int func(int x)
 {
  static int arr[5];
 } 

但问题是我事先并不知道数组的大小(即它取决于x)。所以,我必须使用'new'声明一个数组。

可以这样做吗?

 static int *arr=new int[x];

或者我必须这样做:

  static int *static arr = new int[x]

如果不是那么 怎么做?

2 个答案:

答案 0 :(得分:2)

static int *arr = new int[x];没问题。但是,您需要担心内存泄漏,因为delete [] arr;没有好处。

如评论中所述,首选本地static std::vector<int> arr;,因为在程序结束时会自动调用析构函数。

答案 1 :(得分:0)

我认为这不合法。 您可以使用变量“动态”调整函数范围内的数组的原因是AFAIK,因为数组被放在堆栈中:

void foo(int x)
{
   int bar[x]; // this is legal
} // but goes out-of-scope here :-(

声明数组static会破坏它。可以这样想:链接器没有机会知道数组的大小,因此找不到任何“超出”数组的东西(显然不可取)。

所以基本上你需要通过newdelete来使用堆。或者更好地使用已建议的std::vector<>(在内部使用堆)。