ho overloadded nuovo [] come questoC++ overloaded new [] query: quale dimensione prende come parametro? operatore
void * human::operator new[] (unsigned long int count){
cout << " calling new for array with size = " << count << endl ;
void * temp = malloc(count) ;
return temp ;
}
e ora chiamando
human * h = new human[14] ;
dicono sizeof(human) = 16
, ma conta la stampa è 232, che è 14 * 16 + sizeof (int *) = 224 +8.
Perché viene assegnato questo spazio aggiuntivo? E dove cade nella memoria? Perché quando stampo *h
O h[0]
ottengo gli stessi risultati, quindi non è all'inizio del frammento di memoria. È corretto O mi manca qualcosa qui?
Buona domanda. Eppure il nitpicker dentro di me deve precisare che non si controlla che malloc() restituisca un puntatore nullo. – sharptooth
@sharptooth: giusto ma è stato intenzionale perché volevo concentrarmi sulla vera domanda e non aggiungere troppe ifs :) Idealmente, è necessario controllare temp! = 0 altrimenti lanciare qualche eccezione (bad_alloc kinda) –
I byte extra servono per la memorizzazione il numero di byte assegnati. Ma dove memorizza dipende dall'implementazione. – bjskishore123