Und nun erteile ich der anderen Partei das Wort, die finally aus Übersichtlichkeitsgründen weglässt.
Wozu?
Weil ihr nicht lesen wollt: Ich lasse Finally (und auch das Try) dann weg, wenn ich Code an die Tafel schreibe.
Oder einen Codeschnippsel zur Erklärung irgendwo hin poste.
Oder wenn ich in einem Buttonclick irgend eine Funktion ausführe und dafür mal eben ein Objekt brauche.
Oder wenn ich an der Stelle eh nicht weitermachen kann.
Ich verwende Try-Finally genau dann (und nur dann), wenn ich einen Resourcen schützen möchte bzw. wenn ich die Exception abfangen muss.
Ich wiederhole mich: Ich kenne keine Speicherlecks in meinen Programmen. Es mag sie geben, aber FastMM zeigt sie mir nicht. Wozu dann also Try-Finally an den Stellen, an denen es überflüssig ist?
Mir scheint, die Diskussion ist am Ende, denn es gibt immer nur wieder Argumente, warum Try-Finally in bestimmten Situationen notwendig, korrekt, hilfreich oder essentiell ist. Nur ist das nicht das bzw. mein Thema. Ich programmierer weiss gott lange genug, um mir über die Feinheiten von Try-Finally im Klaren zu sein. Gerade deshalb will ich überflüssigen Schnickschnack vermeiden.
Es ist wie du so schön sagtest minimalistisch.
Nein, ist es nicht.
Object.Free ist minimalistisch bzw. FreeAndNil dann, wenn es unbedingt notwendig ist.
Warum sollte ich mir extra noch einen Status mitführen, ob ein Objekt noch existiert.
Wozu willst Du denn den Status mitschleppen, wenn Du es nicht benötigst? Ein privates Feld kann ich im Destruktor ruhigen Gewissens mit Free freigeben.
Zitat:
...Und es macht die Fehleranalyse auch einfacher, wenn ich weiß, dass eine Speicherschutzverletzung an einer höheren Adresse in keinem Fall von einem schon freigegebenen Objekt stammen kann.
Na ja, stimmt nicht ganz, nur erkennt man es vielleicht eher bzw. an der Adresse. Ich weiss aber nicht, wie Du programmierst, aber in meinen Anwendungen habe ich beim Entwanzen nicht mit Speicherschutzverletzungen zu kämpfen. Passiert schon mal, ist aber sehr schnell gefunden.
Aber gut. Der eine knallt seinen Code mit Try-Finally voll, der andere programmiert vielleicht so, das er es nur dann einsetzt, wenn es auch sinnvoll ist. Jedem das Seine.
-------
Ich setz mich jetzt übrigens in die Ecke und schmolle ganz fürchterlich, weil ihr mich nicht verstehen wollt.
Oder weil wir einfach aneinander vorbeireden.
Das Bild hängt schief.