DELPHI中使用对象,象不象C#那样,在对象生存期结束时,自动释放掉?
我见到有些对象在使用后,都要调用free,如果使用多个对象.做这个有些麻烦.什么时候一定非要调用free不可呢?

解决方案 »

  1.   

    对象使用结束后,就释放了,就要调用free
      

  2.   

    如果是你自己创建的对象,那么就需要释放如:
    var
      SL: TStringList;
    begin
      ...
      SL := TStringList.Create;
      try
        ...
      finally
        SL.Free;
      end;
    end;
      

  3.   

    delphi 没有自动释放资源
      你可以自己写代码实现智能指针(引入接口)
      

  4.   

    如果对象经常使用(比如某个窗体,数据模块),可以放置在内存中,不必FREE,下次调用速度很快,不过对象的数据都是你上次关闭的留下的,重新使用可能需要进行设置.如果不追求速度又要省内存,FREE掉,调用时需要重新CREATE,创建的对象的初始状态都是一样的(因为每次都是新创建的:))
    不知道明白没有,呵呵
      

  5.   

    to: Larry1030(阿摯)
    自己写代码实现智能指针(引入接口) <--是一个怎样的思路,能否说说?
      

  6.   

    Free就相当于如下代码:
    if A<>nil then 
      A.Destory;
    调用free比调用Destory安全,它避免了访问悬空指针
      

  7.   

    当然,如果你实在不想用free方法,也可以。只是这样的程序会逐渐消耗完计算机资源……
      

  8.   

    对象使用过释放资源是好习惯,但不是非要释放不可,实在不想free就算了
      

  9.   

    系统建的对象
    系统free;
    自己建的对象
    自己free;
    想帮系统一把的话,就把系统建的对象free(一般没必要)。
    一般不用Destory,因为free比较安全,原因楼上5层已经说过了1
      

  10.   

    对于自己创建的对象,结束时FREE掉。
      

  11.   

    FrenAndNil(YourObject);
    // YourObject.Free;
    // YourObject := Nil;
      

  12.   

    据说Delphi本来也像加入垃圾回收机制的,后来由于各种原因,搁置了。不过用用就习惯了,就像begin end一样,create和free配对出现,写create语句时,下一条语句就写free,然后再中间加入其他代码。这样就不会忘记了。
      

  13.   

    自己建立的控件,不是D自己生存管理的组件,Com对象,自己分配的内存(数组,Tstringlist,对垒等)..
      

  14.   

    delphi .net就不用free了,不是delphi.net就要自己free掉,只要你创建了一个对象,你就要把它free掉。不像C++那样还有stack unwinding,delphi中所有对象都是指针。
      

  15.   

    1.不是Create(Owner)而是Create创建控件实例的方法需要自己free;
      例如:Tstringlist就只有Create方法
    2.如果是Create(Owner)创建控件,那么当Owner为nil的需要手动free,而Owner为Application或者self、具体的控件对象时,一般根据它的生存期来决定是否手动释放(手动释放可以及时回收资源),当然也可以不手动释放,它会跟随Application、self对象、具体的控件对象释放时自动释放。
      例如:
      Opendialog:=Topendialog.create(nil)的需要进行Opendialog.free;
      Opendialog:=Topendialog.create(Application)当应用程序退出的时候会自动释放
      Opendialog:=Topendialog.create(self)当self释放的时候会自动释放
      Opendialog:=Topendialog.create(panel)当panel释放的时候会自动释放这里比较复杂的是self对象,最好你找本书看看,delphi精要里有详细的讲解,你可以参考一下。
      

  16.   

    同意楼上的...
    Create(Nil)时要自己手动Free
    Create(Owner)时由容器等之类的(比如Application,MainForm)管理它的生命周期,
    一般可以不用手动Free
    推荐你看看 刘艺 <<Delphi面向对象编程思想>>