Delphi没有垃圾收集器,因此来自Java背景,这真是一个大难题。
通常,要销毁一些内存,我将不再使用:
if (SomeMemory <> nil) then
SomeMemory.Free
如果我nil
在删除前不进行检查会怎样?
另外,为什么有人要自己处理所有这些“垃圾收集”呢?为什么在Delphi的所有编译选项中都没有Garbage Collector = true
的代码TObject.Free
如下所示:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
因此,无需检查nil
。但是,如果尝试释放未初始化的变量,仍然会遇到麻烦,因为这将导致出现AV。检查nil
(或Assigned
)显然也无济于事。但是,如果尝试这样做,编译器会警告您。
回答第二个问题
为什么在Delphi的所有编译选项中,没有Garbage Collector = true
简单的答案是Delphi没有这样的垃圾收集器。某些托管类型(如字符串,动态数组等)实现编译器托管的自动引用计数,并且这些对象的引用计数降至零时会自动释放它们。对于所有其他非托管对象,开发人员有责任在不再需要它们时适当清理对象实例。
这不是想要管理应用程序的内存的问题,这只是您所需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句