经常在代码中看到有的用同赋值NIL销毁,有的用DISPOSE有的用FREE,有的用DESTROY有的用FREEANDNIL,甚至还有用两者的组合的,比如先赋值NIL,再用FREEANDNIL的也有,弄的我脑子都乱了,到底怎么用啊,请专家们给总结一下吧!谢谢了!
解决方案 »
- 请问如何将以树的某个节点为根节点的所以子节点清空
- 请问一下Twwdbdatetimepicker是哪个控件啊,我下载不到了!它是代替选时间的TDateTimePicker的
- 用QuickReport打印一张图片,希望按照用户设定纸的大小,动态调整图片比例,适应纸的大小。有好办法吗?
- 急!!!swf加入资源文件后,怎样做到不释放到具体的目录,而直接调用(达到保护swf文件的目的)?
- 在MS SQL做视图提示不可以做,错误提示,
- Mediaplayer1的函数调用问题
- 如何用Delphi或C++Builder代码实现一个程序关闭另处一个应用程序。
- chinawcs在吗?继续求教网页post数据
- 请问怎样才能让程序每次启动时都显示上次所打开的数据库表??
- 我是DELPHI的初学者,望各位大虾推荐几本学习DELPHI的好书。谢谢!
- 用ODBC访问Paradox表的问题,搞定马上给分!
- 如何在字符串中使用分号
对于接口来说,一般是系统自动释放,如果需要手工释放,使用nil,不能使用Free
New() dispose()
GetMem() FreeMem()
上面在一行的是必要成对使用的;前都分配内存,后者回收内存;
常用的技巧为:
try
new();
finally
Dispose()
end;对于对象操作:
Create()//----创建对象,分配内存空间;
Free() FreeAndNil() Destory()//----回收内存,用任一个就可以了,但一般情况下都用前二者.
为与对象操作安全性有关.在回收一个对象实例时,应先判断这个对象实例是否存在,否则会产生内存访问错的错误.常用的技巧为:
var
frm:Tfrom;
try
frm:=tform.create(nil);
......
finally
freeandnil(frm);
//frm.free;
//frm:=nil;//不要使用析构方法DESTORY来回收.易造成错误的.
//实际上,用FREE方法时:是先判断这个对象实例是否存在
//如果存在,则调用对象的析构方法来回收内存了.
end;
而freeandnil过程相当于object.free;object := nil;对于使用new来分配的内存,一般使用dispose来释放空间。
对于使用getmem分配的内存,一般使用freemem来释放。