对象如何销毁?大家给讲讲吧,初学者渴望你的帮助!

pcfans007 2006-03-22 01:09:11
经常在代码中看到有的用同赋值NIL销毁,有的用DISPOSE有的用FREE,有的用DESTROY有的用FREEANDNIL,甚至还有用两者的组合的,比如先赋值NIL,再用FREEANDNIL的也有,弄的我脑子都乱了,到底怎么用啊,请专家们给总结一下吧!谢谢了!
...全文
176 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tensionli 2006-03-22
  • 打赏
  • 举报
回复
对于对象通常用free和destory来销毁,二者的区别是,Destroy会直接释放对象,而Free会检查该对象是否存在,如果对象存在,或者对象不为nil,它才会调用Destroy。因此,程序中应该尽量使用free来释放对象,这样更加安全一些。但要注意,free也不会自动将对象置为nil,所以在调用free之后,最好是再手动将对象置为nil。
而freeandnil过程相当于object.free;object := nil;

对于使用new来分配的内存,一般使用dispose来释放空间。
对于使用getmem分配的内存,一般使用freemem来释放。
小呆之家 2006-03-22
  • 打赏
  • 举报
回复
对于指针的操作:
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;


pcfans007 2006-03-22
  • 打赏
  • 举报
回复
谢谢,尽快结贴
阿发伯 2006-03-22
  • 打赏
  • 举报
回复
对于Delphi对象来说,应该使用free,有时为了防止释放已经free的对象,在free后在赋予nil一边检查,为简便就直接使用FreeAndNil函数了。
对于接口来说,一般是系统自动释放,如果需要手工释放,使用nil,不能使用Free
bluz 2006-03-22
  • 打赏
  • 举报
回复
补充一点,new调用了getmem,dispose调用了freemem.

16,748

社区成员

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

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