静态变量动态分配

use*_*652 9 c++ static dynamic

函数内部的静态变量仅在程序的生命周期内分配一次.

所以,如果我有一个像这样的功能:

void f(int n) {

  static int *a = new int[n];

}
Run Code Online (Sandbox Code Playgroud)

我先打电话

f(1)
Run Code Online (Sandbox Code Playgroud)

然后

f(3)
Run Code Online (Sandbox Code Playgroud)

第二次通话后阵列有多大?

Die*_*ühl 6

static变量local local函数在第一次控制通过它们时被初始化.标准中的相关部分是6.7 [stmt.dcl].也就是说,除非您明确更改其大小,否则数组将获取大小1并保持此大小.

C++ 2011中的好处是初始化static变量也是线程安全的:如果另一个线程在初始化变量时到达实例,则第二个线程被阻塞,直到初始化完成.


mfo*_*ini 6

static当控制流第一次到达声明时,将初始化局部变量.在这种情况下,由于您使用的是第一次1作为n参数,你会是一个分配的大小int.

做这种事情是个坏主意.您应该只使用本地,非静态std::vector或其他更高级别的容器.