2013-02-06 42 views

回答

-1

嗯,從技術上講,int在程序啓動時分配。當函數被調用時它不會被改變。除了變量只在函數內部可見之外,它與在文件級聲明一個靜態完全一樣。

+5

呃。我很確定'new int'沒有被執行,只有在函數運行之前'value'才被賦值......這就是爲什麼人們經常在函數中使用靜態函數來避免常規的靜態初始化順序問題。 – David

+1

@Clyde Dave是對的。程序啓動時不會分配int,而是在第一次調用該函數時。 – jogojapan

+0

程序加載時,指向int的指針存在於DataSegment中。所以它被「分配」。但它指向的是在運行時分配的。 –

1

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

事情要知道在函數中調用一個靜態變量時:

  1. 類的功能是分享的所有實例這個變量,這將是對所有的人都一樣,如果它隨着一切而變化。

  2. 如果你線程這個類的靜態變量的訪問將不會線程安全。

2

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

但讓我建議你別的東西。 我假設你有一個功能類似:

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

那麼,你很可能會做以下(這是百分之百正確的):

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

謝謝。我實際上需要動態分配一個數組,所以它需要使用新的。謝謝! – user2045245

+1

@ user2045245,我可以建議'std :: vector'嗎? – chris

相關問題