向大家请教如何正确地释放资源。
在关闭一个窗体之前该做什么处理进行资源释放?
又如果我在应用程序中使用了一个TDataMoudle,TDataMoudle中包含若干的数据访问空间,那么我在退出程序之前进行资源释放,又该如何处理?
在什么时候进行处理比较合适?
再请教FreeAndnil(),free,Destroy之间的不同,什么时候可以使用?问题多多,请大家帮忙了,谢谢!
在关闭一个窗体之前该做什么处理进行资源释放?
又如果我在应用程序中使用了一个TDataMoudle,TDataMoudle中包含若干的数据访问空间,那么我在退出程序之前进行资源释放,又该如何处理?
在什么时候进行处理比较合适?
再请教FreeAndnil(),free,Destroy之间的不同,什么时候可以使用?问题多多,请大家帮忙了,谢谢!
解决方案 »
- delphi7升级为2010 ,关于TIdy TCP控件呢。
- 一个简单问题,求助高手,万分感谢!
- 如何将TREEVIEW中被选择的多个文件或目录拷贝到一个新的目录
- 动态链接库问题
- 求刀剑外挂资料和缘码!
- 初学者请教两个DELPHI小问题!
- 错误提示“Asynchronous socket error”可以在哪里得到祥解?
- 1000分求救!!谁知道把系统的邮箱设为Outlook Express而不要Microsoft Outlook??
- 关于用线程向多个窗口中发送字符串的问题
- 请教各位打下,我的delphi程序为什么狂吃内存,我已经加了free/destroy!!!!!!
- 关于query的小问题-------在线等!
- 小MM提问-----关于dbgrid的问题
FreeAndnil() 为释放一个对象,并以空指针代替
free 为释放一个对象
Destroy 为消灭一个对象。
自己看
其他的有delphi自动帮你释放
与
free; youclass:=nil
等价
是否要关闭一个窗体时,只要close一下就可以了?不需要自己再进行资源释放?曾看到这样的程序
在窗体的onclose事件中,有Action:=CaFree;
在窗体的OnDestroy中,又有Form1:=nil;
如果说,delphi自己会释放,那上面两个事件中的代码是否画蛇添足?请多多指教!
free 为释放一个对象
Destroy 为消灭一个对象。那么执行这三者后果有何不同?什么时候用哪个最好?或者用哪个结果都一样?
在窗体的OnDestroy中,又有Form1:=nil;
写这些代码应该是怕当需要对一个窗体重复创建时,会导致前一次创建的窗体的资源(假定为
a)没有被释放掉而写。而且delphi自己可能也不能自动回收,因为这时没有指向a的任何指针
考虑你在一个按钮内写这样的事件
form1:=tform1.create(self);
form1.show;
如果你点击了这个button两次,则tform1类总共被实例化了两次。但是第一次创建的tform1你
现在能访问的到吗?form1已经指向第二次创建的tform了。因此第一次创建的tform1所占的
资源成了垃圾,delphi自己可能也不能自动回收这样的垃圾。为了保险,就可以在tform1的
onclose事件中写上action:=caFree,手动释放每次实例化的资源。
form1:=nil应该是为了应付这样的情况考虑你在一个按钮内写这样的事件
if form1<>nil then
form1:=tform1.create(self);
form1.show;
这样的代码保证tform1只会生成一次。但是如果你把生成的tform1关闭了,而且fromclose
事件里写上了action:=caFree,然后你再点击这个button,因为delphi在资源释放时并没有
把指向资源的指针清空,所以这时的form1<>nil,但form1指向的内存已被释放了。这样就
会报一个access violation的错,所以在关闭窗体时form1:=nil;
而
Free 首先判断对象指针是否有效,再调用 Destroy...
SO:通常情况下, 用Free,安全,更可读一些啦~
----------------
一般,你没用调用特别构造函数(如 .create , GetDC, GetFree) DELPHI 都会自动去清扫如果你动态创建了控件,或开避了新内存,就要相应的手动去消除它了