delphi – 对象的引用计数

前端之家收集整理的这篇文章主要介绍了delphi – 对象的引用计数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的代码中,我使用了一个小型数据存储类,它在不同的地方创建.为了避免内存泄漏并简化操作,我想使用引用计数,所以我做到了
type TFileInfo = class (TInterfacedObject,IInterface)

删除了我对TFileInfo.Free的所有手动调用.不幸的是Delphi报告了很多内存泄漏.搜索SO我发现以下问题解释了为什么这不起作用:

Why aren’t descendants of TInterfacedObject garbage collected?

有一个解决方法,但它需要我(至少如果我做对了)编写一个自定义接口IFileInfo并为它提供了许多getter和setter,我想避免.

编辑我应该补充一点,我将创建的FileInfo对象插入到两种不同类型的哈希表中:一个来自TBucketList,另一个是来自Codegear论坛的哈希映射实现.在内部他们都是用户指针,所以情况就像在另一个问题中一样.

还有其他可能使Delphi中的对象使用引用计数吗?

解决方法

遗憾的是,只有在使用接口时(在您的情况下自定义接口IFileInfo),Delphi编译器才会为inc / dec引用计数生成必要的代码.此外,如果接口被强制转换为指针(或者TObject),那么也不能进行引用计数.例如,假设全局变量列表:TList:
var ifi : IFileInfo;
begin
  ifi := TFileInfo.Create;
  list.Add(TFileInfo(ifi));
end;

方法返回后,list [list.Count – 1]将包含悬空指针.

因此,接口不能用于将它们转换为指针的hashmap,hashmap实现必须将它们保持为IInterface.

原文链接:https://www.f2er.com/delphi/102072.html

猜你在找的Delphi相关文章