Zum Abend noch etwas eher Esoterisches:
Ein schlauer Kerl hatte hier nie die Speicherleck-Prüfung an. Ich schalte sie ein und
sehe dass dieses Konstrukt hier jedes mal eine TPrinter
-Instanz und eine myClosure
-Methode leaked. Letztere ist rekursiv und erhöht somit ihren eigenen Referenzzähler. Sie selbst hat aber natürlich auch eine Referenz auf den IPrinter
weshalb dieser ebenfalls nie tot geht.
Ist nicht eher die IPrinter Referenz das Problem?
Wie wäre es mit:
Delphi-Quellcode:
procedure p();
var
myClosure: TProc;
myCounter: Integer;
myPrinter: IPrinter;
begin
myCounter := 10;
myPrinter := TPrinter.Create();
myClosure :=
procedure()
begin
myPrinter.
write(myCounter);
Dec(myCounter);
if (myCounter > 0)
then myClosure();
myPrinter :=
NIL;
end;
myClosure();
end;
Mavarik
PS.:
OT:Voll die Seuche, wer verwendet den Tabs im Source...