Einzelnen Beitrag anzeigen

ISurf

Registriert seit: 1. Mär 2016
6 Beiträge
 
#2

AW: Den Leak bei rekursiven Closures bekämpfen

  Alt 6. Jul 2016, 20:55
Hallo,
ich hab den Code aus Interesse mal in eine Konsolenanwendung gepackt, aber mit ReportMemoryLeaksOnShutdown auf True zeigt er bei mir keine Leaks an, erst wenn ich myPrinter als TPrinter deklariere, was ja auch Sinn macht.
Version: Delphi 10 Seattle.

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
   IPrinter = interface
      procedure write(const value: Integer);
   end;

   TPrinter = class(TInterfacedObject, IPrinter)
      public procedure write(const value: Integer);
   end;

procedure TPrinter.write(const value: Integer);
begin
  System.Write('Wert: ');
  System.Writeln(value);
end;

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();
      end;
   myClosure();
end;

begin
  ReportMemoryLeaksOnShutdown:=true;
  p();
  Readln;
end.
  Mit Zitat antworten Zitat