我刚刚考虑使用新的 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/