问:请讲解Owner 和 Parent的详细区别,老达摩 和 nofog 有空也来说说 Owner是一个对象的拥有者,负责该对象的释放。当Owner释放时,被它拥有的所有对象将都被释放Parent是一个控件的“父”,即该控件的容器,它决定该控件在哪里显示 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果Panel2已经释放掉,指针为nil了,那么b:=TButton.Create(panel2);就相当与b:=TButton.Create(nil);所以此时点Button2不能释放b 我试着又Free了Panel1,这样即使Panel2还在,也不能看到创建的Button了,而我想知道的是,在Create、Owner和Parent的背后,Delphi是如何安排它们的生存期,并且是如何管理它们的内存的?如果太复杂,能推荐这方面的书给我自己看吗? 你free Panel1后将造成内存泄漏,b在内存中没有被释放成了垃圾,正如 dancemaple(枫之舞) 所说,点击Button2释放了Panel2以后,在点击Button1,就相当与b:=TButton.Create(nil);此时b能显示,因为他有Parent Panel1,然而Panel1被free并不会free b。所以说,如果b有Owner(拥有者)时你不必负责它的删除,Owner被析构时,他负责释放他拥有的组件。而父组件负责调用子组件的方法来绘出子组件,父组件和拥有者可以是不同的。 那么,释放掉Panel2后创建b是不是已经造成了内存泄漏呢? 对阿,我也想问,如果TButton.Create(nil),那么这个按钮由谁来释放呢?由系统来管理吗? 如果TButton.Create(nil),那么这个按钮只能由你来释放,系统不会管理的。看看delphi5开发人员指南582页。 procedure TForm1.Button1Click(Sender: TObject);var b:Tbutton;begin b:=TButton.Create(nil); b.Parent:=panel1;end;是啊这样b所指的一块内存在该过程结束后,就成了没人管的了记得看书说,当程序结束后,操作系统会回收应用程序所占用的内存但在执行期间将一直占用 怎么使用第三方控件 dbgrid打开一张数据库表,修改一个cell的值后,点击别的cell就能更新成新数据,点击dbgrid的空白处怎么就恢复成未修改前的数啦? paintline函数的用法 用过devExpress的朋友请进来交流一下,有没有遇到过这个bug 如果通过IDispatch的Invoke()实现后期捆绑 权限获得问题 报表 新安装的D7 新建立一个应用程序 出错 括号内的数字相加 Delphi,怎么获取电脑上USB口数量,然后Usb口有没有一个标识。 什么是Object Pascal 高分求教,关于treeview的问题 !!!
b:=TButton.Create(panel2);
就相当与
b:=TButton.Create(nil);
所以此时点Button2不能释放b
而我想知道的是,在Create、Owner和Parent的背后,Delphi是如何安排它们
的生存期,并且是如何管理它们的内存的?如果太复杂,能推荐这方面的书给我
自己看吗?
所以说,如果b有Owner(拥有者)时你不必负责它的删除,Owner被析构时,他负责释放他拥有的组件。
而父组件负责调用子组件的方法来绘出子组件,父组件和拥有者可以是不同的。
看看delphi5开发人员指南582页。
var b:Tbutton;
begin
b:=TButton.Create(nil);
b.Parent:=panel1;
end;是啊这样b所指的一块内存在该过程结束后,就成了没人管的了
记得看书说,当程序结束后,操作系统会回收应用程序所占用的内存
但在执行期间将一直占用