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
Freigeben: 2024-11-27 19:46:11
Original
749 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage