Das FreeAndNil sehe ich gar nicht mal als Problem.
Ich könnte ja auch Funktionen nutzen um Variablen zu initialisieren:
Delphi-Quellcode:
Procedure Testa(var test : TStringList);
Begin
test := TStringList.Create();
test.Add('Testzeile');
End;
Procedure Testb();
var
slTemp : TStringList;
Begin
Testa(slTemp); // alles wunderbar
ShowMessage(slTemp.Text);
slTemp.Free();
End;
Das Problem ist eher, dass er bei "sl.Text = '';" direkt in der ersten Zeile,
nicht meckert, obwohl "sl" definitiv nicht initialisiert ist.
Wird das wohl durch "try-except" wegoptimiert?
Und lokale Variablen muss man trotzdem freigeben.
Arrays braucht man nicht mit "SetLength(x, 0);" freigeben,
aber sonst muss alles, was erzeugt wird auch freigegeben werden.
Ahja: Interfaces haben einen Referenzzähler, so dass das noch
wieder anders läuft.
Auch zur Laufzeit erstellte Komponenten muss man nicht unbedingt freigeben,
weil sie ja einem Parent zugeordnet werden und freigegeben werden, wenn
das Parent freigegeben wird.
Mehr Außnahmen fallen mir gerade nicht ein, ansonsten empfehle ich MadExcept
zum Testen auf Speicherlecks.
MfG Incocnito