2013-05-28 17 views
2

默認情況下,該程序運行正常,但我要明確地調用h.clear()在main(),或者是明確的()在聲明的情況下,總是調用全球地圖變量的?要求調用在C++地圖變量clear()函數的

map <int , long long> h; 
long long f(int n) 
{ 
    . 
    . 
    . 
} 
int main() 
{ 
    long long int t,n,x; 
//Should I explicitly invoke h.clear() here? 
} 

回答

1

如果你的代碼真的只是這個,那麼地圖將是空的。

這可能是一個非空的更奇特的情況下,像

map <int , long long> h; 

int fetchSomeVar() 
{ 
    h[ 0 ] = 0; 
    return 0; 
} 

int someVar = fetchSomeVar(); 


int main() 
{ 
    //... 
} 

其中fetchSomeVar將之前主要被稱爲偏偏修改地圖,但應避免這樣的構造。

+0

所以,如果變量中聲明說:main()中,即當它是非全局的,是它也是在創建時是空的? –

+0

是因爲那麼它是不是一個全局變量了,所以當它進入活動範圍 – stijn

+0

非常感謝,對信息這只是初始化。我非常感謝你的幫助。 你能不能也建議一些參考,以便查找這樣的信息可能是由我自己完成的? –

0

該地圖將被銷燬,但直到main完成後。在main末調用clear()與否,如果h被其它全局的析構函數引用只會影響你的程序(這應該是在同一個翻譯單元)。

2

clear()不叫你,但也沒有必要。析構函數將負責清理並釋放映射內部使用的內存。

如果您預計這將在退出main遭到破壞等全局對象取決於事實,映射爲空,您應該只清除地圖(看起來像一個壞主意,但誰知道...)

+0

感謝您的幫助,其實我是問這樣的變量初始化,雖然我不知道毀滅採取在地圖上的變量。 –