动态创建一个窗口时.create(Application/nil/self)有何区别呢?(40分)

  • 主题发起人 主题发起人 archy
  • 开始时间 开始时间
A

archy

Unregistered / Unconfirmed
GUEST, unregistred user!
动态创建一个窗口时form1:=Tform1.create(Application)
form1:=Tform1.create(nil);和
form1:=Tform1.create(self)有何区别?似乎一样的吗
 
用application 作为参数,则由application负责释放当前窗体
如果用self则由当前类负责释放
如果用nil则由你自己负责释放,否则将会造成内存泄漏
 
同意楼上
 
不完全正确.
1.使用Application作为参数时的确可以由Application来释放.但你不能依赖Application
去释放.因为只有Application释放的时候才会去释放没有被释放的类.可是你能等到那个时
候吗?你能容忍一个没有用处的类占用宝贵的资源吗?所以常常是即用即撤.不过可以保证没
有内存泄漏是真的.
2.nil参数建立窗体时必须主动释放.在动态建立DLL中的窗体时,使用Application常常出错.
这时候只能用nil作为参数,或者用Application.Handle作为参数,以保证在同一个消息体系
中.
3.使用Self作为参数几乎是错误的.一是,这种用法只能在粝方法中处理,如何这个类不是个
窗体容器的话,毫无意义.至少如果这个Self如果是个TForm的话,难保不出错.
 
agree to barton
 
to barton:
非常感谢,但是我的《Mastering Delphi 5》中说
动态建立MDIchild时是frmChild:=TfrmChild.create(self);不知您认为如何
 
还有好的回答吗?
 
后退
顶部