在Windows目标Delphi应用程序中是否引用了对象引用,如果是,它的目的是什么?

时间:2014-02-28 06:46:40

标签: c++ windows delphi

鉴于对相关问题(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中的引用计数究竟是什么(例如,它是否可以帮助跟踪内存泄漏)?

2 个答案:

答案 0 :(得分:11)

在任何桌面平台(包括Windows)下,对象实例都不是引用计数。仅在移动平台(iOS,Android)下才能引用对象。所以Q1A-E的问题没有实际意义。

答案 1 :(得分:4)

正如Uli已经说过的,在桌面编译器中,对象引用计数。但是在移动编译器中它们是,并且您对这些编译器的问题的答案将是:

  • Q1A:是的,这将是2
  • Q1B:是的,它会降到1
  • Q1C:是的,它将为0并且对象将自动释放
  • Q1D:见Q1C
  • Q1E:见Q1C

请注意,即使在桌面编译器中,也会重新计算接口(以及实现它们的对象)。以上答案也适用于此类界面。