我希望在函数中有一个数组,当我退出函数时它会保留其值,例如 -
int func(int x)
{
static int arr[5];
}
但问题是我事先并不知道数组的大小(即它取决于x)。所以,我必须使用'new'声明一个数组。
可以这样做吗?
static int *arr=new int[x];
或者我必须这样做:
static int *static arr = new int[x]
如果不是那么 怎么做?
答案 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
会破坏它。可以这样想:链接器没有机会知道数组的大小,因此找不到任何“超出”数组的东西(显然不可取)。
所以基本上你需要通过new
和delete
来使用堆。或者更好地使用已建议的std::vector<>
(在内部使用堆)。