Когда вы объявляете анонимный метод внутри процедуры или функции, он очищается, когда эта подпрограмма выходит из области видимости. (Это упрощение, но оно достаточно для текущего обсуждения.) Проблема в том, что основная программа ДНР не «выходит за рамки». Вместо этого компилятор Delphi вставляет скрытый вызов System.Halt
в конце, который никогда не возвращается.
Так что, если вы напишите это так, вы получите уведомление об утечке памяти. Вы можете исправить это, поместив создание анонимного метода в обычную процедуру, например, так:
program Project27;
type
TTestProc = reference to procedure;
procedure CallMe(Proc: TTestProc);
begin
end;
procedure Test;
begin
CallMe(procedure begin end);
end;
begin
Test;
ReportMemoryLeaksOnShutdown := True;
end.