delphi - TDictionary 中的内存泄漏 - 有解决方法吗?

标签 delphi memory-leaks delphi-2009

我刚刚考虑使用新的 TDictionary 类型。但在 QualityCentral 上,我读到了两起由 TDictionary 引起的内存泄漏:

http://qc.codegear.com/wc/qcmain.aspx?d=67355

我刚刚实现了建议的解决方法,基本上是 TDictionary 的子类,覆盖析构函数并手动释放导致泄漏的两个对象:

destructor TMemCorrectedDictionary.Destroy;
begin
  Values.Free;
  Keys.Free;
  inherited;
end;

问题是,由于值和键是 TDictionary 的只读属性,因此我无法将它们设置为 nil。好吧,需要明确的是,现在一切正常,但我想知道如果 CodeGear 发布泄漏补丁并在它们自己的析构函数中再次释放这两个对象会发生什么。这不会导致访问冲突吗?

预先感谢您的阅读(并希望得到答复)。

最佳答案

您可以先调用inherited并检查属性是否仍然设置:

destructor TMemCorrectedDictionary.Destroy;
begin
  inherited;
  Values.Free;
  Keys.Free;
end;

顺便说一句:Free 并不关心要释放的实例是否为 nil,因此如果(但仅当)继承时这才有效Destroy 将属性设置为 nil

关于delphi - TDictionary 中的内存泄漏 - 有解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/511289/

相关文章:

mysql语法返回最新的多行总数

mysql - 连接到远程我的 Sql 显示用户 azerty@41.175.10.32 的访问被拒绝(使用密码 : Yes )

java:我需要关闭所有流吗?

c# - 长时间运行的 Windows 服务是否存在内存泄漏?或者只是看起来像一个?

将 C 转换为 Pascal

java - Looper 泄露消息

delphi - 在哪里定义使用 {$IFDEF} 测试的符号?

database - 寻找D2009+的本地数据库

delphi - 数据快照 : Is there a way to detect connection loss globally?

perl - 如何向 Delphi 应用程序添加 Perl 脚本支持?