在delphi中,我自已定义了一个类TMy,然后声明一个该类的对象Mya,
用Mya:=TMy.Create来实例化,使用完然后用Mya.Free释放掉该对象,
我的问题是一定要用Create和Free方法手动来这样做吗?有没有自动来实例化与清理的方法,象JAVA一样?
不知道问的对不对,新手,请多指教。

解决方案 »

  1.   

    手动用Create和Free有什么麻烦吗?
      

  2.   

    Create和Free已经很好了,过度的自动化操作也许不见得更好吧?
      

  3.   

    create有点像是JAVA中的new,如果不做Free的话,在退出程序的时候,会不会自动释放所有使用过的对像呢?
      

  4.   

    有些是不会释放的,例如:S := TStrings.Create;S就不会自动释放。
      

  5.   


    Application.CreateForm(TfrmGoods,frmGoods);frmGoods会在程序关闭时自动释放。
      

  6.   

    组件有拥有其他组件的性能。一个组件的拥有者是由它的Owner属性指定的。如果一个组件拥有其他组件,则当它被析构时,它负责释放它拥有的组件。通常,窗口拥有在它上面出现的所有组件。
    如果你在窗口设计时把组件放置在窗口上,窗口将自动成为组件的拥有者。当你在运行期间创建一个组件时,必须向组件的Create构造器传递组件的拥有关系;它被设置为新组件的Owner属性。下面一行语句表示了如何向TButton.Create( )构造器传递窗口隐含的参数Self。这样使窗口成为新创建组件的拥有者:
    Mybutton:=TButton.create(self);
    当窗口被析构时,与MyButton有关的TButton实例也会被析构。这是在VCL内部处理的。实质上,窗口再次通过Components数组属性遍历组件并析构它们。
    通过传递nil给组件的Create()方法,可以创建一个不具备拥有者的组件。不过,如果这样做了,编程时你需要负责组件的删除。下列代码显示了这个技术:
    Mytable:=TTable.create(nil)
    try
    ....
    finally
    Mytable.free;
    end;
    要使用这个技术,应当用一个try. . . finally块来确保出现异常时释放所分配的资源。你不应使用这个技术,除非特殊情况—不能给组件指定拥有者。
    另一个有关拥有关系的属性是Components属性。Components属性是一个数组属性,包含一个组件所拥有的全部组件的列表。例如,要遍历一个窗口的所有组件以显示它们的类名称,需要执行下列代码:
    var 
    i:integer;
    begin
    for i:=0 to ComponentCount-1 do
    showmessage(Components[i].classname);
    end;
    显然,你还可以针对这些组件执行更有意义的操作。这里只是简单地说明这一技术。
      

  7.   

    Delphi中没有这样的一个垃圾收集的功能,自己控制也很方便啊!