父控件释放后是否其所包含的控件都被释放资源?
第1钟情况:
比如,窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?第2种情况
如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?

解决方案 »

  1.   

    第2种情况
    如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?這種情況可以肯定GroupBox Free後Edit也会被释放的.
      

  2.   

    第1钟情况:
    比如,窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?如果adoquery的Owner为Form的话, Form释放后, ADOQuery也会被释放的, 不占用ADOConnection.依我的理解,指定Owner为TComponent对象的可以由Owner释放,
    而对Owner不是TComponent对象的需要编写代码释放 
    不知道我说的对不对
      

  3.   

    父Owner注销,子TComponent肯定释放
      

  4.   

    第1钟情况:
    比如,窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?
    //close不代表会free窗口form,当然也不会free adoquery
    //如果free窗口form1的话。组件的owner 是form1的话,这个组件也会free掉,否则不会。
    //设计期时拖放在form1上的组件owner都是form1第2种情况
    如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?
    //是(如果你的edit不是动态创建,而且没有指定owner的话)
      

  5.   

    父控件Owner应该会释放所有的子控件
    TComponent对子控件的释放过程是free——〉TObject.free——〉Destroy——〉
    DestroyComponents——〉  while FComponents <> nil do
                             ...
                                Instance := FComponents.Last;
                             ...Instance.Destroy    
    ------------------------------------
    具体子控件内存的释放过程
    是在TObject.FreeInstance里调用
    procedure TObject.FreeInstance;
    begin
      CleanupInstance;
      _FreeMem(Self);
    end;至于说调用Destory以后会不会马上释放内存,
    在帮助里有这么一段话(用FreeInstance 索引):
    All destructors call FreeInstance automatically to deallocate memory that was allocated by overriding NewInstance.
     
    由于是由destructors来自动调用FreeInstance 的,
    我想应该有一套默认的规则来决定是否立即释放内存,
    不过这个应该不用程序员来操心了吧
      

  6.   

    楼主所说的第一种情况窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?
    --------------
    如果窗体指定了CloseAction := csFree,在Form关闭的时候,因为Form是子控件的Owner
    所以它上面的控件可以被释放第二种情况
    如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?
    ---------------------
    如果是用设计器摆放的控件,由于groupbox和edit的Owner都是Form
    所以groupbox.free以后,groupbox上面的edit是不会被释放,需要等到Form.free才行
      

  7.   

    Owner注销,子TComponent肯定释放,在 刘艺《Delphi面向对象编程思想》讲得很详细,找来看看就很清楚了!