鉴于对相关问题(https://stackoverflow.com/a/22086392/1420752)的以下答案是在以Windows为目标的Delphi应用程序中计算的对象引用?
即:
Q1A 在第二个语句后,以下对象的引用计数为2?
o1 := TMyObject.Create;
o2 := o1;
Q1B 继续上述操作后,会将o1
分配给nil
,将引用计数降为1吗?
o1 := nil;
Q1C 再次继续,将o2
分配给nil
将引用计数降为0?
o2 := nil;
Q1D 继续前进,如果以上是正确的并且对象现在的引用计数为0,我理解编译器将 NOT 自动释放对象({应该在o2.Free
之前调用{1}}以防止内存泄漏。请记住,我说的是Windows目标,而不是具有自动引用计数(ARC)的移动目标。
Q1E 如果引用计数没有自动释放与对象关联的内存,那么Delphi中的引用计数究竟是什么(例如,它是否可以帮助跟踪内存泄漏)?
答案 0 :(得分:11)
在任何桌面平台(包括Windows)下,对象实例都不是引用计数。仅在移动平台(iOS,Android)下才能引用对象。所以Q1A-E的问题没有实际意义。
答案 1 :(得分:4)
正如Uli已经说过的,在桌面编译器中,对象不引用计数。但是在移动编译器中它们是,并且您对这些编译器的问题的答案将是:
请注意,即使在桌面编译器中,也会重新计算接口(以及实现它们的对象)。以上答案也适用于此类界面。