Bei der Untersuchung eines Absturzes stieß ich auf diesen Code:
%Vor% Nach meinem Verständnis rufen Sie delete
nur für Objekte an, die von new
erstellt wurden. Zugegeben, einige dieser alten Code ist wirklich schlecht, so ist es wahrscheinlich, dass dies falsch ist, aber ich bin mir nicht sicher. Ist das ein gültiger Code?
Nein, das ist nicht gültig. Verwenden Sie delete
nur für Zeiger, die Sie über new
erhalten haben. Was hier passiert, ist undefiniertes Verhalten; es könnte funktionieren, es könnte abstürzen, es könnte Müll ausgeben, es könnte anfangen, Musik zu spielen ...
Sie müssen fclose()
verwenden, um den Dateigriff zu zerstören.
Wenn Sie wirklich löschen müssen, können Sie einige Wrapper um diese Konstrukte verwenden. Wie,
%Vor%Eine Beispielverwendung wäre
%Vor%Ich persönlich bevorzuge diese Wrapper-Lösung, da sie eine umfassende Möglichkeit bietet, Ressourcen zu verwalten. Zum Beispiel, wenn wir auf einem Code-Segment sind, wo Ausnahmen jederzeit von irgendeinem Teil davon ausgelöst werden können. Wenn wir Ressourcen wie offene Dateien zugewiesen haben, öffnet dieser Mechanismus die Möglichkeit, das Objekt automatisch zu löschen, wenn der Wrapper den Bereich verlässt.