2013-03-22 219 views
0

我有一個數據結構,它看起來像內存管理

template < class T1, class T2 > struct sometype 
{ 
std::vector <T1> v1; 
std::vector <T2> v2; 
T1 deriv[10]; 
}; 

我創建數據結構矢量

std::vector <sometype <T1, T2>> somevec; 

我的疑問是,如果我這樣做

somevec.erase(somevec.begin(), somevec.end()); 
std::vector <sometype <T1, T2>>().swap (somevec); 

我可以回收內存嗎?

+2

回收* *什麼內存?你爲什麼要這麼做?你想解決什麼問題? – 2013-03-22 06:33:35

+0

@CodyGray回收sometype使用的內存。我想要保存內存,因爲我正在解決一個巨大的問題,我需要暫時存儲大約1000萬個類型/內核。 – 2013-03-22 06:37:11

回答

3

可以做得更好:

somevec.erase(somevec.begin(), somevec.end()); 
std::vector <sometype <T1, T2>>().swap (somevec); 

所有你需要做的是:

std::vector <sometype<T1, T2>>().swap(somevec); 

這是因爲你創建一個臨時裏面是空的。然後將空的內容與somevec的實際數據交換。然後臨時被銷燬並回收與變量一起分配的內存(因爲內存被交換到臨時內存中)。

這就是所謂的「縮小字體填充成語」

+0

好的。我不需要像多維指針那樣做任何特殊的事情嗎? – 2013-03-22 06:38:08

+0

應該可以正常工作。因爲你正在縮小第一個維度爲零。因此所有其他維度都消失了。 – 2013-03-22 06:40:13

+0

謝謝你清除我的困惑:) – 2013-03-22 06:40:55