小问题:关于Destroy(10分)

  • 主题发起人 主题发起人 DNChen
  • 开始时间 开始时间
D

DNChen

Unregistered / Unconfirmed
GUEST, unregistred user!
我在动态创建一个控件时发现,最初的指向
该控件的变量是Null,而当我创建使用之后,
用了Destroy释放该控件并不能使其返回Null
状态,如果我直接将他付值为Null的话是可
行的,但是心中一直怕怕的,有没有可能会
导致某些不良因素呢?比如说在某些情况下
会产生运行时错误,或者说浪费了部分内存
等等,请指教。
 
为什么要再给它赋制为NULL呢?
用free后内存就该都释放了,不会浪费内存的。
 
当然可以将它设成NIL,如果不设置的话,有可能在后面的程序中再度释放该控件,
造成内存出错。
 
你应该这样做
先DESTORY;
然后设置为NIL
以后再CREATE也没有问题
记得好象如果不设置NIL,以后CREATE(也许是做其它事)会出问题的
如果不DESTORY,那么会用资源
 
to FX: 付值是因为我的程序是由Systray里的菜单控制,因此即使我用showmodal方
式,也无法实现普通程序中的Showmodal功能,为了同一个窗口不会被用户多次创
建,所以我想判断该窗口是否已经创建,我的考虑方法是检查他是否为null

to Sherman:有道理,不过我现在写的程序中对窗体调用都是很简单的:
创建->showmodal->Destroy,因此发生这种错误的可能性倒也不大。

to CJ: 如果不设定为Null再次create会报错吗?我没有试过,不过好象有这个可能
性哦,本来问这个问题不过是想知道这样付值后会不会浪费内存,想不到又知道了一
个小窍门,呵呵,以后遇到这种问题不会被卡在哪儿怎么也查不出原因了。

谢了,各位,我先不结束这个题目,钓两天鱼,看看还有谁还有高见,所以过几天再
给你们分银子!8-)
 
问一句:
为什么用Destroy,却不用free呢?
Delphi的帮助好象推荐用free方法。
 
最简单的办法,在你的Form的OnClose方法中加入
Action := caFree;
不用每次都设置nil一样不会出错。
如要手工释放,应使用Free方法
 
我设置成nil是有用处的,顺便问一下,用free和用destroy的不同点:...
 
哦?什么特别用处呢?
小道消息,不包准:FREE = DESTORY+NULL

>to Sherman:有道理,不过我现在写的程序中对窗体调用都是很简单的:
>创建->showmodal->Destroy,因此发生这种错误的可能性倒也不大。
什么意思?好象多数都推荐:
xxxx.create....
try
....
finally
xxxx.free;//好象不太看到有人写 xxxx.destory;道理也说不清
end;
 
刚才发现问题是:DNChen 提的
刚才发现问题只有 10 分
 
呵呵, 没想到我这么小气吧,cj,没办法,这个问题本身问不问都无所谓的,只是为了谨慎起见而已。

另外,free不等于destroy + nil

问题就结掉算了。不过分数到挺难分的,早知道,就多放点分进来了
 
多人接受答案了。
 

Similar threads

后退
顶部