![]() |
1
5
不幸的是,Delphi编译器只在使用接口(在您的例子中是自定义接口ifileinfo)时生成必需的代码到inc/dec引用计数。此外,如果接口被强制转换为指针(或针对这一点的tobject),那么就不可能进行引用计数。例如,assumming global variable list:tlist:
方法返回后,list[list.count-1]将包含悬空指针。 因此,不能在将接口强制转换为指针的哈希映射中使用接口,哈希映射实现必须将它们保持为接口。 |
![]() |
2
8
Delphi中的引用计数仅在通过接口引用实例时有效。一旦混合了接口引用和类引用,就有麻烦了。 本质上,您需要引用计数,而不需要创建一个具有其中定义的所有方法和属性的接口。有三种方法可以做到这一点,大致按照我推荐的顺序进行。
这是关于德尔福的事情,有一种实现事情的自由方式。在我看来,选项1是最好的选项-获取Delphi2009,如果可以的话使用该方法。 祝你好运! |
![]() |
3
3
此功能提供给接口,但不提供给对象。 您可以创建类似的内容,但需要重写tobject的某些结构:
您需要refcountedcopy将对象分配给另一个变量。但是你有一个refcounted对象。 如何使用:
|
![]() |
4
3
如果您希望消除对tobject实例的空闲调用,那么您可能需要查看本机delphi的垃圾收集器。我知道两种不同的垃圾收集器和一种垃圾收集技术,每个都有利弊。
其中一个可能对你有用。 |
![]() |
5
3
不要混合对象引用和接口引用。
|
![]() |
6
1
要添加已经说过的内容,如果要存储对接口的引用,而不是使用tlist,请使用 制作者 . 参考计数将持续工作。 |
![]() |
7
0
对此有一个很长的解释,但简而言之:继承TinterfacedObject(而不是调用free yourself)是不够的,您需要使用对象工厂动态来为您创建对象,并在任何地方使用对象的接口指针,而不仅仅是对象引用变量。(是的,这意味着你不能不看就把“旧代码”换掉) |