如果我在循環中有下面幾行:C++指針簡單的問題
Type *unite = new Type(newSize);
或
double *array= new double[anySize];
什麼是什麼顧慮內存,如果我沒有刪除裏面的運營商的行爲它?它會不斷地在不同的內存位置分配對象和數組,從而導致內存泄漏?
如果我在循環中有下面幾行:C++指針簡單的問題
Type *unite = new Type(newSize);
或
double *array= new double[anySize];
什麼是什麼顧慮內存,如果我沒有刪除裏面的運營商的行爲它?它會不斷地在不同的內存位置分配對象和數組,從而導致內存泄漏?
是的。這:
for (int i = 0; i < 10; ++i)
{
Type* unite = new Type(newSize);
}
將分配10個對象,類型Type
,所有在不同的位置。它們中的任何一個都不會被釋放,最後你將不會有指向任何一個的指針。你會泄漏10 * sizeof(Type)
字節的內存。
類似地,本
for (int i = 0; i < 10; ++i)
{
double *array= new double[anySize];
}
意願出於同樣的原因泄漏10 * anySize * sizeof(double)
字節的內存。
它會不斷地在不同的內存位置分配對象和數組,因此內存泄漏?
假設你的意思是這樣的:
for (;x;x)
{
double *ptr = new double[42];
}
那麼答案是肯定的,內存泄漏。
是的。你會在循環的每一次迭代中泄漏內存。 boost::scoped_ptr
和boost::scoped_array
是爲了處理這種情況。
只是一個小細節,但不應該有一些恆定的空間開銷的陣列分配,如'10 * anySize * sizeof(double)+ c'? – 2010-04-30 15:12:56
爲了存儲數組的大小信息,並不要求實現過度分配。例如,數組大小數據可能存儲在某個表中,無論分配是否發生,都會存在。所以雖然你說得對,也會有一些開銷也被泄露,但是不可能量化多少(甚至像'+ c'這樣的普遍性,因爲這意味着開銷通過分配增加'O(n)' ,這不一定是真實的)以適用於所有實現的方式。 – 2010-04-30 16:53:51