2012-03-24 86 views
0

可以說,內聲明釋放該變量的內存我有一個循環:C++:在循環

for(int i = 0; i < 1000; i++) 
{ 
    vector<int> table(100000, 0); 
    int result = some_function(&table); 
    // ... 
} 

是以前的「表」實例的內存中的每個循環週期被釋放?

回答

0

是;每次迭代都會銷燬vector(並在每次迭代中創建)。

0

是的,矢量的析構函數將釋放內存。

3

取決於「內存釋放」的含義。

在每次迭代結束時,調用vector的析構函數,因此調用每個包含元素的析構函數。所以你沒有內存泄漏(如果這是你的擔憂)。

但是,內存是否返回到操作系統是一個不同的問題;這是特定於實現的。至少涉及兩個抽象級別,容器分配器,以及其下的標準實現。

0

我會做這樣的事情。以這種方式,存儲器被保留只是一次,但vector的值是0:

size_t vector_size = 100000; 
vector<int> table(vector_size); 
for(int i = 0; i < 1000; ++i) 
{ 
    memset(&table[0], 0, table.size() * sizeof(int)); 
    int result = some_function(&table); 
    // ... 
} 
+0

的'memset'不是必要的,因爲矢量構造器將intialize重視其元素。 – 2012-03-24 23:12:23

+0

@Jesse:不,它調用默認的構造函數。結果是未定義的。還有一個原因:這種方式數組在第二個循環中也是NULL。 – Naszta 2012-03-27 17:57:46