假设我有一个运行多次的函数。该函数包括以下代码:
static int *hello = new int;
hello
只会在第一次运行时分配?
是的,它只会分配一次。
但是让我建议你别的。我想你有这样的功能:
int* get_static_hello() {
static int* value = new int;
return value;
}
好吧,您可以很好地执行以下操作(它是 100% 正确的):
int* get_static_hello() {
static int value;
return &value;
}
是的,它只会被分配一次。
在函数中使用静态变量时需要注意的事项:
函数所在的类的所有实例都共享这个变量,它们对所有实例都是相同的,如果它在一个中更改,则对所有实例都更改。
如果你线程这个类,静态变量的访问将不是线程安全的。
好吧,从技术上讲,int 是在程序启动时分配的。调用函数时不会更改。除了变量仅在函数内部可见之外,它与在文件级别声明静态完全相同。