C++ hat keine automatisierte Garbage Collection wie einige andere Sprachen, die Speicher freigeben, sobald sie nicht mehr referenziert werden. Dafür gibt es eine Reihe von Gründen, und eine Diskussion zu diesem Thema finden Sie unter Why doesn't C++ have a garbage collector?.
Dies bedeutet, dass new
Ed muss delete
d oder Sie haben ein Leck.
Sagen Sie bitte
haben Wenn Sie den ursprünglichen Wert von head
vor head
Überschreiben nicht delete
tun,
die Adresse des Knotens 1 nicht mehr bekannt, so dass es ist fast unmöglich, die Zuordnung zu delete
es zu finden. Dies erzwingt ein Leck.
Aber wenn Sie delete head
, bevor es erneut zeigen,
Sie können nicht head->next
auf den nächsten Knoten, und Sie verlieren und die ganze Liste auslaufen.
Wenn Sie jedoch eine temporäre Kopie der Adresse head
machen,
old
in diesem Fall können Sie sicher wieder Punkt head
und noch haben Sie die Adresse der Zuordnung, die Sie benötigen, um delete
in old
gespeichert.
Wenn Sie noch diese 3 Zeilen haben, aber in der zweiten Zeile alt zu Kopf ändern - der Code wird gleich sein und kein Speicherleck wird eingeführt. –