object : = class.create;
object.free;
dispose(@object);   两者有什么不同??

解决方案 »

  1.   

    通过跟踪发现,Free的代码如下:
    procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy;
    end;
    我们再来看Destroy;
    destructor TObject.Destroy;
    begin
    end;
    什么也看不到?其实DESTROY是通过汇编来写的,也在SYSTEM的单元中,也就是说,最终还是通过释放这个对象所占用的内存空间来完成的!而dispose(@object)的功能就不用说了吧,其实这两者没有什么根本上的区别!但我认为还是用object.free比较好,原因 很简单,它存在有它的理由,毕竟用它可以避免一些异常,还有就是它有错误处理机制
      

  2.   

    Dispose只是简单地释放object所占的内存,
    并不会调用它的析构函数的吧。
    这样如果你是简单的object是不会有什么问题,
    但是如果你的object里还有别的类型的object的时候,
    那就会出现内存泄漏了。
    所以要用free,因为它会调用析构。
      

  3.   

    dispose:简单的释放object占用的内存,但不能释放object所拥有内部其他的对象。
    destroy: 是对象的析购函数。释放对象以及内部的所有其它对象。
    free:    在destroy之前作self是否为nil的检查。
       所以他最安全,建议对象释放时用free.