CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

父控件释放后是否其所包含的控件都被释放资源?

楼主ayukowa(骑马倚斜桥,满楼红袖招。www.haoup.com(网络导航))2005-08-25 17:58:31 在 Delphi / 语言基础/算法/系统设计 提问

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

1 楼konhon(优华)回复于 2005-08-25 18:07:31 得分 50

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

2 楼konhon(优华)回复于 2005-08-25 18:11:44 得分 0

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

3 楼yq3woaini(哈哈镜 选择好心情)回复于 2005-08-25 18:31:54 得分 50

父Owner注销,子TComponent肯定释放Top

4 楼yq3woaini(哈哈镜 选择好心情)回复于 2005-08-25 18:32:35 得分 0

就和窗体销毁的时候,所有的东西都没了一样,但是不是马上释放内存。Top

5 楼yq3woaini(哈哈镜 选择好心情)回复于 2005-08-25 18:32:52 得分 0

不会马上释放内存Top

6 楼merkey2002(小样的)回复于 2005-08-25 20:23:08 得分 50

第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的话)Top

7 楼sdzeng(大头鸟)回复于 2005-08-25 20:30:02 得分 50

父控件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   的,  
  我想应该有一套默认的规则来决定是否立即释放内存,  
  不过这个应该不用程序员来操心了吧  
   
   
  Top

8 楼sdzeng(大头鸟)回复于 2005-08-25 20:38:02 得分 0

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

9 楼EEsslongli(朗)回复于 2005-08-25 22:33:52 得分 0

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

10 楼ayukowa(骑马倚斜桥,满楼红袖招。www.haoup.com(网络导航))回复于 2005-08-26 09:07:03 得分 0

谢谢了  
  揭帖Top

相关问题

  • 求助啊 : WebBrowser控件的资源释放问题
  • 用户控件为了能够即时释放资源,是不是应该重写Dispose()方法?
  • 请问如何将后台自动生成的控件占有的资源释放
  • 如何释放一个控件
  • 动态数组控件释放问题
  • 动态控件的释放问题
  • 如何释放引用的Activex.exe控件?
  • 关于Table控件释放的问题
  • 在atl中添加一个控制,在里面申请了一些资源,当控件释放时释放这些资源,怎么搞?我找不到析够函数!
  • 怎样在适当的时候释放DELPHI程序中所占用的资源?比如我用QUERY控件打开了许多的数据集但又不知道在什么时候释放比较好,怎样释放?

关键词

  • 控件
  • 内存
  • 执行
  • 组件
  • 连接
  • 释放
  • groupbox
  • 窗体
  • freeinstance
  • adoquery

得分解答快速导航

  • 帖主:ayukowa
  • konhon
  • yq3woaini
  • merkey2002
  • sdzeng

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo