C ++ перегружен запрос new []: какой размер он принимает в качестве параметра? - PullRequest
8 голосов
/ 25 октября 2010

У меня перегружен оператор 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 ИЛИ h[0], я получаю те же результаты, поэтому его нет в начале фрагмента памяти. Правильно ли это вообще ИЛИ мне здесь чего-то не хватает?

Ответы [ 2 ]

6 голосов
/ 25 октября 2010

Выделенное дополнительное пространство используется для хранения размера массива для внутреннего использования (на практике delete[] знает, сколько нужно удалить).

Это хранитсяначало диапазона памяти, непосредственно до &h.Чтобы увидеть это, просто посмотрите на значение temp внутри вашего operator new[].Значение будет отличаться от значения в &h.

3 голосов
/ 25 октября 2010

Хранит количество объектов, выделенных таким образом, чтобы при вызове delete[] удалялось надлежащее количество объектов. См. FAQ для более подробной информации.

...