我想在一个函数中有一个数组,当我退出函数时保留它的值,例如 -
int func(int x)
{
static int arr[5];
}
但问题是我事先不知道数组的大小(即它取决于x)。所以,我必须使用'new'声明一个数组。
可以这样做吗?
static int *arr=new int[x];
还是我必须这样做:
static int *static arr = new int[x]
如果没有,那该怎么做?
我想在一个函数中有一个数组,当我退出函数时保留它的值,例如 -
int func(int x)
{
static int arr[5];
}
但问题是我事先不知道数组的大小(即它取决于x)。所以,我必须使用'new'声明一个数组。
可以这样做吗?
static int *arr=new int[x];
还是我必须这样做:
static int *static arr = new int[x]
如果没有,那该怎么做?
static int *arr = new int[x];
没关系。但是,您需要担心内存泄漏,因为delete [] arr;
.
如注释中所述,static std::vector<int> arr;
首选局部变量,因为它的析构函数在程序结束时自动调用。
我不认为那是合法的。您可以使用变量在函数范围内“动态”调整数组大小的原因是 AFAIK,因为数组被放入堆栈:
void foo(int x)
{
int bar[x]; // this is legal
} // but goes out-of-scope here :-(
声明数组static
会破坏它。可以这样想:链接器没有机会知道数组的大小,因此无法定位“超出”数组的任何内容(显然是不可取的)。
所以基本上你需要通过new
和使用堆delete
。或者更好地std::vector<>
按照已经建议的方式使用(在内部使用堆)。