2010-10-25 58 views
8

我已經overloadded操作者新的[]這樣C++重載新的[]查詢:它需要多大的參數?

void * human::operator new[] (unsigned long int count){ 
     cout << " calling new for array with size = " << count << endl ; 
     void * temp = malloc(count) ; 
     return temp ; 
} 

現在調用

human * h = new human[14] ; 

sizeof(human) = 16,但算它打印是232,其是14 * 16 +的sizeof(INT *)= 224 +8。

爲什麼要分配這個額外空間?它在哪裏落在內存中? 因爲當我打印*hh[0]我得到相同的結果,所以它不在內存塊的開始。它是否正確或我在這裏錯過了一些東西?

+1

好問題。然而,我內部的nitpicker需要指出,你不檢查malloc()返回一個空指針。 – sharptooth 2010-10-25 07:27:35

+0

@sharptooth:你的權利,但這是故意因爲我想專注於真正的問題,而不是添加太多的ifs :)理想情況下,需要檢查temp!= 0否則拋出一些異常(bad_alloc kinda) – 2010-10-25 08:00:42

+0

額外的字節用於存儲分配的字節數。但是,它存儲的地方是與實施相關 – bjskishore123 2010-10-25 08:31:24

回答

6

分配的額外空間用於存儲數組的大小以供內部使用(在實踐中,以便delete[]知道要刪除多少)。

存儲在所述存儲器範圍的開始,則立即&h之前。要查看此信息,只需在operator new[]內查看temp的值即可。該值將與&h中的值不同。

3

它是存儲分配的對象的數量,以便當您調用delete[]時刪除適當數量的對象。有關更多詳細信息,請參閱此FAQ