动态创建的组件或窗体的资源释放问题

King_Dragon 2002-05-31 09:40:46
在程序中,属于运行期动态创建的组件或是窗体,如果指定了Owner,没有显示调用组件或窗体的Free方法,在程序结束时会不会自动调用Free方法,释放动态组件所占有的资源?
另外,如果动态创建组件时没有指定Owner参数(Owner为nil),也没有调用Free或Destroy方法,程序结束时会不会自动释放.请说明理由或是原因!
...全文
62 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellochina 2002-05-31
  • 打赏
  • 举报
回复
在程序中,属于运行期动态创建的组件或是窗体,如果指定了Owner,没有显示调用组件或窗体的Free方法。那么在Owner Free的时候,就会自动释放组件所占有的资源。
如果Owner的参数为nil的时候,在Owner Free的时候,是不会自动释放组件的,必须自己显示的释放。
因为在TComponent中有一个私有的FComponents,如果在组件Create的时候,如果Owner不为nil, 那么,该组件就会加入到Owner的FComponents,如果组件或者窗体没有调用Free,那么会在Owner Free 的时候,Owner会自动Free FComponents 中的所有成员。如果组件或者窗体自己显示的调用了Free,那么就会从Owner 的FComponents 中删除,不存在Free两次在现象。
详细的情况可以看一下Delphi 中TComponent的实现。
Almzg_0 2002-05-31
  • 打赏
  • 举报
回复
Owner解释为宿主,你自己可以做个小测试。比如在一个PANEL上自动创建一个BUTTON,然后只释放PANEL,你在程序中FINDCOMPONENT将找不到那个BUTTON
bigchg 2002-05-31
  • 打赏
  • 举报
回复
找不到句柄

1,185

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧