我已经像这样重载了运算符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]
时,我得到相同的结果,所以它不在内存块的开头。它是否正确或我在这里遗漏了一些东西?
答案 0 :(得分:6)
分配的额外空间用于存储数组的大小以供内部使用(实际上,delete[]
知道要删除多少)。
存储在内存范围的开头, &h
之前。要查看此内容,只需查看temp
中operator new[]
的值即可。该值将与&h
中的值不同。
答案 1 :(得分:3)
存储分配的对象数,以便在调用delete[]
时删除适当数量的对象。有关详细信息,请参阅此FAQ。