C ++重载new []查询:参数的大小是多少?

时间:2010-10-25 07:16:55

标签: c++ overloading new-operator

我已经像这样重载了运算符new []

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。

为什么要分配这个额外的空间?它在哪里记忆? 因为当我打印*h OR h[0]时,我得到相同的结果,所以它不在内存块的开头。它是否正确或我在这里遗漏了一些东西?

2 个答案:

答案 0 :(得分:6)

分配的额外空间用于存储数组的大小以供内部使用(实际上,delete[]知道要删除多少)。

存储在内存范围的开头, &h之前。要查看此内容,只需查看tempoperator new[]的值即可。该值将与&h中的值不同。

答案 1 :(得分:3)

存储分配的对象数,以便在调用delete[]时删除适当数量的对象。有关详细信息,请参阅此FAQ