Der betreffende Code:
void deleteForMe(int* pointer) { delete[] pointer; }
hat ein undefiniertes Verhalten, wenn der Zeiger nicht auf zeigt ein Array, da es blind eine delete[]-Operation ausführt. Wenn der Zeiger jedoch auf ein Array verweist, wie in:
int main() { int* arr = new int[5]; deleteForMe(arr); return 0; }
Das Betriebssystem weiß irgendwie, dass es nur die angegebenen Array-Elemente löschen und nicht darüber hinausgehen soll.
Der Schlüssel zu diesem Verhalten liegt darin in den historischen Wurzeln von C als C-kompatible Sprache. Um Programmierer, die keine Arrays verwenden, nicht mit unnötigem Overhead zu belasten, wurde die delete[]-Syntax eingeführt.
Wenn eine Nicht-Array-Zuweisung vorgenommen wird, wie zum Beispiel:
Foo* foo = new Foo;
kein Extra Es entsteht Overhead für die Array-Unterstützung. Bei Array-Zuweisungen ist dieser Overhead jedoch vorhanden. Um anzugeben, dass die Laufzeitbibliotheken diese Informationen verwenden sollen, muss der Programmierer delete[] für Array-Zeiger angeben.
Die Wahl zwischen delete und delete[] basiert also auf der spezifischen Zuordnung, die gelöscht wird. Dies ermöglicht eine feinkörnigere Speicherverwaltung und steht im Einklang mit der Minimalismus-Philosophie von C.
Das obige ist der detaillierte Inhalt vonWoher weiß „delete[]', wie viele Elemente aus einem Array gelöscht werden müssen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!