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

迭戈·鲁达(Diego Rueda)

Delphi没有垃圾收集器,因此来自Java背景,这真是一个大难题。

通常,要销毁一些内存,我将不再使用:

if (SomeMemory <> nil) then
  SomeMemory.Free

如果我nil在删除前不进行检查会怎样

另外,为什么有人要自己处理所有这些“垃圾收集”呢?为什么在Delphi的所有编译选项中都没有Garbage Collector = true

J ...

的代码TObject.Free如下所示:

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;

因此,无需检查nil但是,如果尝试释放未初始化的变量,仍然会遇到麻烦,因为这将导致出现AV。检查nil(或Assigned)显然也无济于事。但是,如果尝试这样做,编译器会警告您。

回答第二个问题

为什么在Delphi的所有编译选项中,没有Garbage Collector = true

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Flash ActionScript中调用不存在的方法时会发生什么?

来自分类Dev

处理器尝试访问不存在的物理地址时会发生什么?

来自分类Dev

dmcrypt:不存在用户空间加密包装时会发生什么?

来自分类Dev

当我用尽内存以维护mapWithState的状态时会发生什么?

来自分类Dev

在RTOS中释放或发出信号时会发生什么?

来自分类Dev

当我使用多个模拟时间时会发生什么?

来自分类Dev

当我绑定到AliasProperty时会发生什么?

来自分类Dev

当我调用“ BufferStrategy.show()”时会发生什么?

来自分类Dev

当我放弃对iOS 6的支持时会发生什么?

来自分类Dev

MySql-当我用“ and”更新时会发生什么

来自分类Dev

当我多次调用requestAnimationFrame时会发生什么

来自分类Dev

当我放弃对iOS 6的支持时会发生什么?

来自分类Dev

当我截断正在使用的文件时会发生什么?

来自分类Dev

当我将%esp移至%ebp时会发生什么?

来自分类Dev

当我不输入期望的命令时会发生什么?

来自分类Dev

当我忘记登录TTY时会发生什么?

来自分类Dev

当我使用多个模拟时间时会发生什么?

来自分类Dev

当我调用“ BufferStrategy.show()”时会发生什么?

来自分类Dev

当我取消订阅 Observable 链时会发生什么?

来自分类Dev

当没有内存在C#中构造OutOfMemoryException时会发生什么?

来自分类Dev

当我们在Android Studio中添加DEPENDENCY时会发生什么

来自分类Dev

当我在Bash脚本中对函数使用`&`时会发生什么?

来自分类Dev

当我在异步回调中设置对象时会发生什么?

来自分类Dev

当我在C ++中对未初始化的指针调用“删除”时会发生什么?

来自分类Dev

当我在代码中留下一些断点时会发生什么?

来自分类Dev

当我们在Collections.synchronizedMap()中传递哈希表时会发生什么

来自分类Dev

当我在SQL Server中删除列时会发生什么

来自分类Dev

当我在函数中重新分配可变默认参数时会发生什么?

来自分类Dev

当我将鼠标悬停在Chrome中的链接上时会发生什么?

Related 相关文章

  1. 1

    在Flash ActionScript中调用不存在的方法时会发生什么?

  2. 2

    处理器尝试访问不存在的物理地址时会发生什么?

  3. 3

    dmcrypt:不存在用户空间加密包装时会发生什么?

  4. 4

    当我用尽内存以维护mapWithState的状态时会发生什么?

  5. 5

    在RTOS中释放或发出信号时会发生什么?

  6. 6

    当我使用多个模拟时间时会发生什么?

  7. 7

    当我绑定到AliasProperty时会发生什么?

  8. 8

    当我调用“ BufferStrategy.show()”时会发生什么?

  9. 9

    当我放弃对iOS 6的支持时会发生什么?

  10. 10

    MySql-当我用“ and”更新时会发生什么

  11. 11

    当我多次调用requestAnimationFrame时会发生什么

  12. 12

    当我放弃对iOS 6的支持时会发生什么?

  13. 13

    当我截断正在使用的文件时会发生什么?

  14. 14

    当我将%esp移至%ebp时会发生什么?

  15. 15

    当我不输入期望的命令时会发生什么?

  16. 16

    当我忘记登录TTY时会发生什么?

  17. 17

    当我使用多个模拟时间时会发生什么?

  18. 18

    当我调用“ BufferStrategy.show()”时会发生什么?

  19. 19

    当我取消订阅 Observable 链时会发生什么?

  20. 20

    当没有内存在C#中构造OutOfMemoryException时会发生什么?

  21. 21

    当我们在Android Studio中添加DEPENDENCY时会发生什么

  22. 22

    当我在Bash脚本中对函数使用`&`时会发生什么?

  23. 23

    当我在异步回调中设置对象时会发生什么?

  24. 24

    当我在C ++中对未初始化的指针调用“删除”时会发生什么?

  25. 25

    当我在代码中留下一些断点时会发生什么?

  26. 26

    当我们在Collections.synchronizedMap()中传递哈希表时会发生什么

  27. 27

    当我在SQL Server中删除列时会发生什么

  28. 28

    当我在函数中重新分配可变默认参数时会发生什么?

  29. 29

    当我将鼠标悬停在Chrome中的链接上时会发生什么?

热门标签

归档