Muss neu immer immer delete folgen? [Duplikat]

8

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?

    
GRB 04.04.2009, 02:15
quelle

6 Antworten

10

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.

    
Reed Copsey 04.04.2009, 02:20
quelle
7

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.

    
Brian Campbell 04.04.2009 02:22
quelle
1

Hier nicht. Aber wenn das Programm größer und komplexer wird, würde ich meinen Speicher verwalten, damit ich Bugs schneller aufspüren kann. Der Standard sagt nichts, aber im kleinen Fall in gute Gewohnheiten zu kommen, führt zu einem besseren langfristigen Code.

    
ojblass 04.04.2009 02:19
quelle
0

Sie können vollkommen vergessen, Dinge zu löschen.

Magst du es, Erinnerungen zu verschwenden?

    
Joshua 04.04.2009 02:18
quelle
0

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.

    
nraynaud 04.04.2009 02:22
quelle

Tags und Links