Wegen genau dieser Problematik meide ich Funktionen, die Klasseninstanzen zurückgeben, welche erst innerhalb der Funktion erzeugt werden, wie der Teufel das Weihwasser.
Die Problematik ist ja nicht das Instanzieren innerhalb einer Funktion, sondern das Freigeben.
Gegen das Instanzieren innerhalb einer Funktion spricht überhaupt nichts, wenn es im Funktionsnamen ersichtlich ist. Ich verwende öfters Funktionen, die eine Instanz erzeugen. Kleines Beispiel: Eine Stringlist ist bei mir in den meisten Fällen sortiert und lässt keine Duplikate zu. Ist normalerweise ein Dreizeiler.
Delphi-Quellcode:
sl:=TStringlist.create;
sl.sorted := True;
sl.duplicates := dupignore;
Dafür gibt es bei mir folgende Funktion (so ähnlich)
Delphi-Quellcode:
Function TStringlistSortedDupIgnore_Create;
begin
result := TStringlist.create;
result.sorted := True;
result.duplicates := dupignore;
end;
Aufrufen muss ich dann nur noch
sl := TStringlistSortedDupIgnore_Create;
Aus drei Zeilen mach eine. Finde ich sehr praktisch.