Ich denke, wir alle verstehen die Notwendigkeit des Löschens, wenn ein dynamisch zugewiesener Zeiger neu zugewiesen wird, um Speicherlecks zu verhindern. Ich bin allerdings gespannt, inwiefern C ++ die Verwendung von delete vorschreibt. Nehmen Sie zum Beispiel das folgende Programm
%Vor%Während hier praktisch kein Leck auftritt (da Ihr Programm zu Ende geht und das Betriebssystem den gesamten Speicher aufräumt, sobald es zurückkehrt), aber der Standard immer noch die Verwendung von delete erfordert oder empfiehlt [] in diesem Fall? Wenn nicht, würde es einen anderen Grund geben, warum Sie [] hier löschen würden?
Es gibt nichts, was eine Löschung [] im Standard erfordert - ich würde jedoch sagen, dass es eine sehr gute Richtlinie ist, der man folgen sollte.
Es empfiehlt sich jedoch, bei jeder neuen oder neuen [] -Operation ein Lösch- oder Löschzeichen [] zu verwenden, auch wenn der Speicher beim Beenden des Programms bereinigt wird.
Viele benutzerdefinierte Objekte haben einen Destruktor, der andere Logik als nur das Aufräumen des Speichers ausführt. Die Verwendung von delete garantiert die Zerstörung in diesen Fällen.
Wenn Sie sich in Ihren Routinen bewegen, verursachen Sie weniger Speicherlecks an anderen Stellen in Ihrem Code.
Dupe von Gibt es einen Grund, in C ++ zu löschen, wenn ein Programm trotzdem beendet wird?
Die Antwort ist, dass aufgrund von Destruktoren, die ausgeführt werden müssen, manchmal das Objekt vor dem Beenden des Programms gelöscht werden muss. Wenn Sie dies nicht tun, werden sich viele Speicherleckerkennungstools ebenfalls beschweren. Um das Auffinden von echten Speicherlecks zu erleichtern, sollten Sie daher versuchen, alle Objekte vor dem Beenden zu löschen.
Siehe:
Wann "neu" zu verwenden ist und wann nicht zu, in C ++?
lösche und lösche [] dasselbe in Visual C ++?
Warum gibt es eine spezielle neue und löschen für Arrays?
Wie Speicherzuweisungen in C ++ zu verfolgen (besonders neu / löschen)
Was ist der Unterschied zwischen neu / löschen und? malloc / frei?Ich kenne den Standard nicht, aber es gibt einen ganzen Programmierstil um diese Frage: crash-only softxare Theoretisch sollten Datenbanken oder OS-Kernel als solche entwickelt werden, aber oft ist es nicht wirklich praktisch, sie so zu verwenden, weil es beim Neustart einige Bereinigungen gibt, die lange dauern können. Außerdem sind abhängige Systeme (Programme innerhalb eines Betriebssystems oder Datenbank-Clients) möglicherweise nicht nur absturzsicher.
Tags und Links c++ new-operator