可以說,內聲明釋放該變量的內存我有一個循環:C++:在循環
for(int i = 0; i < 1000; i++)
{
vector<int> table(100000, 0);
int result = some_function(&table);
// ...
}
是以前的「表」實例的內存中的每個循環週期被釋放?
可以說,內聲明釋放該變量的內存我有一個循環:C++:在循環
for(int i = 0; i < 1000; i++)
{
vector<int> table(100000, 0);
int result = some_function(&table);
// ...
}
是以前的「表」實例的內存中的每個循環週期被釋放?
是;每次迭代都會銷燬vector
(並在每次迭代中創建)。
是的,矢量的析構函數將釋放內存。
取決於「內存釋放」的含義。
在每次迭代結束時,調用vector的析構函數,因此調用每個包含元素的析構函數。所以你沒有內存泄漏(如果這是你的擔憂)。
但是,內存是否返回到操作系統是一個不同的問題;這是特定於實現的。至少涉及兩個抽象級別,容器分配器,以及其下的標準實現。
我會做這樣的事情。以這種方式,存儲器被保留只是一次,但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);
// ...
}
的'memset'不是必要的,因爲矢量構造器將intialize重視其元素。 – 2012-03-24 23:12:23
@Jesse:不,它調用默認的構造函數。結果是未定義的。還有一個原因:這種方式數組在第二個循環中也是NULL。 – Naszta 2012-03-27 17:57:46