Auch ein zweiter Aufruf an Free knallt sonst.
Korrekt, aber dann ist mein Programm ja falsch. Ein fehlerfreies Programm benötigt kein FreeAndNil!
Nein, das ist nicht falsch. Es ist wie du so schön sagtest minimalistisch. Warum sollte ich mir extra noch einen Status mitführen, ob ein Objekt noch existiert. Wenn ich FreeAndNil benutzt habe, kann ich das einfach am Ende noch einmal hinschreiben. Ist es schon freigegeben, umso besser, wenn nicht, passiert es dort.
Wenn man 100%ige Kontrolle über den Programmfluss hat, braucht man das natürlich nicht, aber das ist eben nicht immer der Fall.
Ich benutze FreeAndNil bei Feldern eines Objekts immer. Einfach weil es die Fehlersuche erheblich vereinfacht, wenn ich weiß, dass in Speicherdumps oder ähnlichem
alle schon freigegebenen Objektzeiger auch wirklich nil sind. 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.