【发布时间】:2009-02-04 13:15:51
【问题描述】:
我刚刚考虑使用新的 TDictionary 类型。但在 QualityCentral 上,我读到了由 TDictionary 引起的两个内存泄漏:
http://qc.codegear.com/wc/qcmain.aspx?d=67355
我刚刚实现了建议的解决方法,基本上是子类化 TDictionary,覆盖析构函数并手动释放导致泄漏的两个对象:
destructor TMemCorrectedDictionary.Destroy;
begin
Values.Free;
Keys.Free;
inherited;
end;
问题是,由于 Values 和 Keys 是 TDictionary 的只读属性,我不能将它们设置为 nil。好吧,为了清楚起见,现在一切正常,但我想知道如果 CodeGear 为泄漏发布补丁并在它们自己的析构函数中再次释放这两个对象会发生什么。这不会导致访问冲突吗?
提前感谢您的阅读(并希望能回答)。
【问题讨论】:
-
感谢您的回答。尽管我真的不喜欢在释放对象后依靠其他人将所有对象设置为零的想法。还是我在这里偏执?
-
我知道你的意思并同意。如果我是你,我会在热修复或服务包中解决此问题时再次查看源代码 - 只是为了确定。我希望尽快修复,因为 TDictionary 中还有其他严重的错误需要紧急修复。
-
另外请注意,目前您应该避免使用 TDictionary,因为它的 Clear 方法中存在错误并且其添加性能很差。更多详情请看这里:alex.ciobanu.org/?p=59
标签: delphi memory-leaks delphi-2009