gpt4 book ai didi

delphi - 当我释放 Delphi 中可能不存在的内存时会发生什么?

转载 作者:行者123 更新时间:2023-12-03 15:37:27 26 4
gpt4 key购买 nike

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)显然也无济于事。但是,如果您尝试这样做,编译器会警告您。

回答你的第二个问题

Why among all the compiling options Delphi has, there is no Garbage Collector = true

简单的答案是Delphi没有这样的垃圾收集器。某些托管类型(如字符串、动态数组等)实现编译器管理的自动引用计数,并且当它们的引用计数降至零时,这些对象将自动释放。对于所有其他非托管对象,开发人员有责任在不再需要对象实例时适本地清理它们。

这不是想要管理应用程序内存的问题,这只是您需要管理的理所当然的事情。

关于delphi - 当我释放 Delphi 中可能不存在的内存时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22565456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com