2010-10-25 21 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