C ++ überladene neue [] Abfrage: Welche Größe braucht es als Parameter?

8

Ich habe den Operator new [] wie diesen

überladen %Vor%

und jetzt rufen

%Vor%

sagen sizeof(human) = 16 , aber zählen Sie es Drucke 232 ist das ist 14 * 16 + sizeof (int *) = 224 + 8.

Warum wird dieser zusätzliche Speicherplatz zugewiesen? Und wo fällt es in Erinnerung? Weil, wenn ich *h ODER h[0] drucke, bekomme ich dieselben Ergebnisse, so dass es nicht im Beginn des Speicherblocks ist. Ist es überhaupt richtig oder ich vermisse etwas hier?

    
Manish Baphna 25.10.2010, 07:16
quelle

2 Antworten

6

Der zusätzliche zugewiesene Speicherplatz wird verwendet, um die Größe des Arrays für die interne Verwendung zu speichern (in der Praxis, damit delete[] weiß, wie viel gelöscht werden soll).

Es ist am Anfang des Speicherbereichs gespeichert, unmittelbar vor &h . Um das zu sehen, schau dir einfach den Wert von temp in deinem operator new[] an. Der Wert unterscheidet sich von dem in &h .

    
Konrad Rudolph 25.10.2010, 07:19
quelle
3

Es wird die Anzahl der zugewiesenen Objekte gespeichert, so dass beim Aufruf von delete[] die richtige Anzahl von Objekten gelöscht wird. Weitere Informationen finden Sie in den FAQ .

    
Naveen 25.10.2010 07:21
quelle

Tags und Links