Können Sie ein FILE-Objekt löschen, das von fopen erstellt wurde?

7

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?

    
Jesse Jashinsky 08.09.2014, 23:17
quelle

2 Antworten

14

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.

    
cdhowie 08.09.2014, 23:21
quelle
4

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.

    
Doonyx 08.09.2014 23:52
quelle

Tags und Links