小菜 !!Free Dispose 使用上有什么不同??

phonlee 2003-01-10 03:43:31
object : = class.create;
object.free;
dispose(@object);

两者有什么不同??
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Drate 2003-01-10
  • 打赏
  • 举报
回复
通过跟踪发现,Free的代码如下:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
我们再来看Destroy;
destructor TObject.Destroy;
begin
end;
什么也看不到?其实DESTROY是通过汇编来写的,也在SYSTEM的单元中,也就是说,最终还是通过释放这个对象所占用的内存空间来完成的!

而dispose(@object)的功能就不用说了吧,其实这两者没有什么根本上的区别!

但我认为还是用object.free比较好,原因 很简单,它存在有它的理由,毕竟用它可以避免一些异常,还有就是它有错误处理机制
idilent 2003-01-10
  • 打赏
  • 举报
回复
free
GnuSoft 2003-01-10
  • 打赏
  • 举报
回复
dispose:简单的释放object占用的内存,但不能释放object所拥有内部其他的对象。
destroy: 是对象的析购函数。释放对象以及内部的所有其它对象。
free: 在destroy之前作self是否为nil的检查。
所以他最安全,建议对象释放时用free.
singlesword 2003-01-10
  • 打赏
  • 举报
回复
Dispose只是简单地释放object所占的内存,
并不会调用它的析构函数的吧。
这样如果你是简单的object是不会有什么问题,
但是如果你的object里还有别的类型的object的时候,
那就会出现内存泄漏了。
所以要用free,因为它会调用析构。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧