Heim >Backend-Entwicklung >C++ >Woher weiß „delete[]', wie viele Elemente aus einem Array gelöscht werden müssen?

Woher weiß „delete[]', wie viele Elemente aus einem Array gelöscht werden müssen?

Susan Sarandon
Susan SarandonOriginal
2024-11-27 19:46:11765Durchsuche

How Does `delete[]` Know How Many Elements to Delete from an Array?

Wie entschlüsselt delete[] ein Array?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn