我可以使用static关键字只分配一次新内存吗

Can I use the static keyword to only allocate new memory once?

本文关键字:一次 可以使 新内存 内存 关键字 static 分配 我可以      更新时间:2023-10-16

假设我有一个函数运行了多次。该功能包括以下代码:

static int *hello = new int;  

hello是否只在第一次运行时分配?

是的,只分配一次。

但让我给你提个别的建议。我想你有这样的功能:

int* get_static_hello() {
    static int* value = new int;
    return value;
}

好吧,你可以很好地做以下(这是百分之百正确的):

int* get_static_hello() {
    static int value;
    return &value;
}

是的,只分配一次。

在函数中使用静态变量时需要注意的事项:

  1. 函数所在类的所有实例都共享此变量,所有实例的变量都是相同的,如果其中一个实例发生变化,则所有实例都会发生变化。

  2. 如果对此类进行线程化,则静态变量的访问将不会是线程安全的。

从技术上讲,int是在程序启动时分配的。当函数被调用时,它不会被更改。除了变量仅在函数内部可见之外,它与在文件级别声明静态完全相同。