请问各位大虾们Destroy与Free的区别

解决方案 »

  1.   

    撤销对象 
     
        当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来。您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存。 
        Delphi的注销方法有两个:Destroy和Free。Delphi建议使用Free,因为它比Destroy更为安全,同时调用Free会生成效率更高的代码。 
        您可以用下列的语句释放用完的Employee对象: 
     
          Employee.Free; 
     
         
    和Create方法一样,Free方法也是TEmployee从TObject中继承过来的。把您的注销放在try…finally程序模块的finally部分,而把对象的程序代码放在try部分是编程的好习惯。这样,即使您的程序代码在使用对象时发生了异常事件,也会确保您为这个对象分配的内存会被释放。关于异常 
    处理和try…finally程序模块的信息以及建立非可视化对象的例子,在后文中还将仔细讲述。 
      
      

  2.   

    区别不大,只不过Free检查当前对象是否为空。你看看源代码:
    procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy;
    end;看到了吧?就多了一个检查。
      

  3.   

    综楼上各位所说。
    一般用FREE,不用DESTROY
      

  4.   

    Destroy是析构函数,Free不是,Free也是通过调用Destroy析构的,只不过在调用Destroy之前先检查当前对象是否为空。避免自己在代码重检查。
    实际代码如下
    procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy;
    end;
    不过对于重复调用Free还是会导致异常,因为系构后对象指针还是指向原来的地址,不会变为nil,所以建议用Freeandnil析构,这个函数在调用Free后还会把对象指针设置为nil,但对于多个指针指向同一个对象还是无能为力
      

  5.   

    尽量多用FREE,不要直接用DESTROY。
      

  6.   

    谢谢各位
    我再问一个问题
    就是Oracle中的Select 语句调用Function时当Select 语句释放时Function还在运行?
    为什么??????