Frage

Ich denke, wir verstehen alle die Notwendigkeit, delete beim Neuzuweisen einer dynamisch zugewiesenen Zeiger, um einen Speicherüberlauf zu verhindern.Aber ich bin neugierig, zu was Ausmaß hat die C++ - Mandat die Verwendung von delete?Nehmen wir zum Beispiel das folgende Programm

int main()
{
     int* arr = new int[5];
     return 0;
}

Während für alle Absichten und Zwecke, kein Leck Auftritt, hier (da Ihr Programm zu Ende und das Betriebssystem sauber bis alle Erinnerung, sobald es den gibt), aber nicht der standard immer noch erforderlich-oder empfehlen -- die Verwendung von delete[] in diesem Fall?Wenn nicht, gäbe es irgendeinen anderen Grund, warum Sie delete[] hier?

War es hilfreich?

Lösung

Es gibt nichts, das erfordert, dass delete[] in der standard - Jedoch würde ich sagen, es ist eine sehr gute Leitlinie zu Folgen.

Es ist jedoch besser, die Praxis zu verwenden delete oder delete[] mit jedem new oder new[] Betrieb, auch wenn der Speicher aufgeräumt werden von der Beendigung des Programms.

Viele benutzerdefinierte Objekte haben einen Destruktor andere Logik als nur die Säuberung der Speicher.Verwendung delete garantiert die Zerstörung in diesen Fällen.

Auch, wenn Sie sich jemals bewegen, Ihre Routinen, Sie sind weniger wahrscheinlich zu verursachen Speicherlecks in anderen stellen in Ihrem code.

Andere Tipps

Dupe Gibt es einen Grund zu nennen delete in C++, wenn ein Programm beendet wird sowieso?

Die Antwort ist, dass, weil von Destruktoren ausgeführt werden müssen, ist es manchmal notwendig, um das Objekt zu löschen, bevor Sie das Programm verlassen.Auch viele memory-leak-detection-tools beschweren, wenn Sie dies nicht tun, so zu machen es einfacher zu finden, echte Speicherlecks, die Sie sollten versuchen, und löschen Sie alle Ihre Objekte vor dem beenden.

Hier nicht.Aber als das Programm, das immer größer wird und komplexere ich würde verwalten meinem Speicher, so, dass kann ich track down bugs schneller.Der standard sagt nichts, sondern immer in gute Gewohnheiten in den kleineren Fall führt zu besseren code zu langfristig.

Sie sind vollkommen frei, zu vergessen, zu löschen.

Tun Sie wie Speicher zu verschwenden?

Ich weiß nicht, der Standard, aber es ist eine ganz Programmierstil um diese Frage: Absturz-nur softxare Theoretisch Datenbanken oder Betriebssystem-kernels entwickelt werden sollten als solche, aber oft ist es nicht wirklich praktisch ist, Sie zu verwenden wie die, weil Sie auf neu starten, es ist etwas Aufräumen, die lang sein können.Außerdem abhängige Systeme (Programme, die innerhalb einer Betriebssystem-oder Datenbank-clients) möglicherweise nicht Absturz-nur.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top