如果组件构造进是 create(self)的话,在宿主析构时会自动析构该组件。
也就是说在应用程序关闭时会自动清除有宿主的组件,那如果是create(nil)的话是不是
在应用程序关闭后还是会存在内存中?
是不是这种原因导致有时程序打开多次后,系统会变慢,要重启一下就好了。
小弟很困惑!求助

解决方案 »

  1.   

    你CREATE时,用self 或Appliaction
      

  2.   

    我的意思是如果是用NIL后,是不是用户不手动对它析构,是不是应用程序关闭后都不会清除。我知道他们的用法,在这里我只想知道不清除的后果及原理。
      

  3.   

    我做了实验,是可以清除的,你试试var
      edit:array[0..5000] of Tedit;
      i: integer;
    begin
      for i:=0 to 10000 do
      begin
        edit[i]:=Tedit.Create(nil);
        edit[i].Parent:=self;
      end;
    end;
      

  4.   

    create后面括号里的参数是owner,所有者。
    析构时,是由这个owner来负责释放的。如果是nil,就得自己释放。
    不过我还是喜欢用nil。
      

  5.   

    看看这段代码,你就会明白了
    destructor TComponent.Destroy;
    begin
      Destroying;
      if FFreeNotifies <> nil then
      begin
        while Assigned(FFreeNotifies) and (FFreeNotifies.Count > 0) do
          TComponent(FFreeNotifies[FFreeNotifies.Count - 1]).Notification(Self, opRemove);
        FreeAndNil(FFreeNotifies);
      end;
      DestroyComponents;
      if FOwner <> nil then FOwner.RemoveComponent(Self);
      inherited Destroy;
    end;
      

  6.   

    Delphi会帮你处理掉。
    但是,还是多加一句吧。如果有Create,而没有Free,我总觉得怪怪的。
      

  7.   

    一般来说,有多少个Create就有多少个Free,直接用FreeAndNil