delphi - 嵌套匿名方法发生内存泄漏

标签 delphi memory-leaks anonymous-methods

在Delphi XE中,以下代码会导致内存泄漏:

procedure TForm1.Button1Click(Sender: TObject);
var P, B: TProc;
begin
  B := procedure
       begin
       end;

  P := procedure
       begin
         B;
       end;
end;

运行代码

ReportMemoryLeaksOnShutdown := True;

和内存管理器提示:

21-28 bytes: TForm1.Button1Click$ActRec x 1

最佳答案

这是由于匿名方法的工作方式造成的。匿名方法作为 TInterfacedObject 后代实现,如果同一例程中有多个匿名方法,they end up as two methods of the same object.它使用接口(interface)进行引用计数,因此您最终不会泄漏对象。然而,if an anonymous method references itself, that ends up throwing off the reference count并导致内存泄漏。您在这里看到的情况是由这两件事共同造成的。

关于delphi - 嵌套匿名方法发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6273376/

相关文章:

java - 从匿名 Java 子类访问 "this"

c# - 如何在 C# 中返回通用列表集合?

c# - Predicate<int>匹配题

delphi - TXMLDocument 的替代方案?

html - Firefox 破坏标题并添加随机字符

android - ListActivity性能问题

objective-c - 退出应用程序时dealloc方法是否正常执行?

delphi - 这个语法是什么意思?

windows - Delphi:如何向其他应用程序发送命令?

ios - AVPlayer播放期间出现无法解释的崩溃