请问tform2.Create(nil)中的nil是什么意思啊?马上揭贴

架构之路 2005-10-27 05:52:14
with tform2.Create(nil) do
try
showmodal;
finally
free;
end;

我一般用
if form1=nil then
form1:=TForm.Create(self)

前种方法中的nil是什么意思,前种方法和我的方法那一个更好呀??感谢答疑解惑
...全文
248 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
XDvlper 2005-10-28
  • 打赏
  • 举报
回复
首先,nil是空指针;其次控件的默认构造函数是Create(AOwner: TComponent),AOwner是要创建控件的拥有者,即控件创建后会加入到AOwner的控件列表中,此时控件的生存期可以交给AOwner控制,在AOwner释放时,会将它的控件列表中的所有控件释放,如果这时你自己维护控件的生存期,在AOwner释放之前,将控件释放了,会导致AOwner在释放控件时导致异常,只不过它自己吞掉了,而且影响效率。如果指定AOwner为nil,那么就是说控件的生存期没有东西可以帮你维护,你只能自己去维护。
xiaocuo_zrf 2005-10-28
  • 打赏
  • 举报
回复
with tform2.Create(nil) do
try
showmodal;
finally
free;
end;

-----------
TForm2进行实例化的时候没有指定他的属主。
因为是ShowModal的窗体,所以
用With do 引起来,在Finally后手动释放
如果 form1:=TForm.Create(self)
表示 Form1的属主是你这个Self 当Self释放的时候 Form1也被释放了
//
详细资料参看刘艺《Delphi面向对象编成思想》
架构之路 2005-10-28
  • 打赏
  • 举报
回复
释放是不是在form.close时进行的啊?
sunnysmile 2005-10-28
  • 打赏
  • 举报
回复
没有指定属主!
xixuemao 2005-10-27
  • 打赏
  • 举报
回复
传nil说明需要自己管理你form的释放

不传nil说明不用自己释放form,你form的所有者会帮你释放

个人倾向与自己释放的方式。
solokey 2005-10-27
  • 打赏
  • 举报
回复
自己释放写nil就可以了..
Create(AOwner:TComponent);
AOwner就是它的所有者..所有者释放时也会释放该组件..
如果为nil,就需要手动释放该组件了.
至于怎么用.你自己权衡就可以了..

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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