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

时间:2013-02-06 01:55:03

标签: c++ static keyword

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

static int *hello = new int;  

hello只会在第一次运行时分配吗?

3 个答案:

答案 0 :(得分:2)

是的,它只会被分配一次。

但是我建议你别的什么。 我想你有这样的功能:

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

嗯,你可以做到以下几点(它百分之百正确):

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

答案 1 :(得分:1)

是的,它只会被分配一次。

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

  1. 该函数所在的类的所有实例都共享此变量,对于所有这些实例,它将是相同的,如果它在一个实例中发生更改,则会更改所有实例。

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

答案 2 :(得分:-1)

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