什么时候一定要调用FREE方法 DELPHI中使用对象,象不象C#那样,在对象生存期结束时,自动释放掉?我见到有些对象在使用后,都要调用free,如果使用多个对象.做这个有些麻烦.什么时候一定非要调用free不可呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对象使用结束后,就释放了,就要调用free 如果是你自己创建的对象,那么就需要释放如:var SL: TStringList;begin ... SL := TStringList.Create; try ... finally SL.Free; end;end; delphi 没有自动释放资源 你可以自己写代码实现智能指针(引入接口) 如果对象经常使用(比如某个窗体,数据模块),可以放置在内存中,不必FREE,下次调用速度很快,不过对象的数据都是你上次关闭的留下的,重新使用可能需要进行设置.如果不追求速度又要省内存,FREE掉,调用时需要重新CREATE,创建的对象的初始状态都是一样的(因为每次都是新创建的:))不知道明白没有,呵呵 to: Larry1030(阿摯)自己写代码实现智能指针(引入接口) <--是一个怎样的思路,能否说说? Free就相当于如下代码:if A<>nil then A.Destory;调用free比调用Destory安全,它避免了访问悬空指针 当然,如果你实在不想用free方法,也可以。只是这样的程序会逐渐消耗完计算机资源…… 对象使用过释放资源是好习惯,但不是非要释放不可,实在不想free就算了 系统建的对象系统free;自己建的对象自己free;想帮系统一把的话,就把系统建的对象free(一般没必要)。一般不用Destory,因为free比较安全,原因楼上5层已经说过了1 对于自己创建的对象,结束时FREE掉。 FrenAndNil(YourObject);// YourObject.Free;// YourObject := Nil; 据说Delphi本来也像加入垃圾回收机制的,后来由于各种原因,搁置了。不过用用就习惯了,就像begin end一样,create和free配对出现,写create语句时,下一条语句就写free,然后再中间加入其他代码。这样就不会忘记了。 自己建立的控件,不是D自己生存管理的组件,Com对象,自己分配的内存(数组,Tstringlist,对垒等).. delphi .net就不用free了,不是delphi.net就要自己free掉,只要你创建了一个对象,你就要把它free掉。不像C++那样还有stack unwinding,delphi中所有对象都是指针。 1.不是Create(Owner)而是Create创建控件实例的方法需要自己free; 例如:Tstringlist就只有Create方法2.如果是Create(Owner)创建控件,那么当Owner为nil的需要手动free,而Owner为Application或者self、具体的控件对象时,一般根据它的生存期来决定是否手动释放(手动释放可以及时回收资源),当然也可以不手动释放,它会跟随Application、self对象、具体的控件对象释放时自动释放。 例如: Opendialog:=Topendialog.create(nil)的需要进行Opendialog.free; Opendialog:=Topendialog.create(Application)当应用程序退出的时候会自动释放 Opendialog:=Topendialog.create(self)当self释放的时候会自动释放 Opendialog:=Topendialog.create(panel)当panel释放的时候会自动释放这里比较复杂的是self对象,最好你找本书看看,delphi精要里有详细的讲解,你可以参考一下。 同意楼上的...Create(Nil)时要自己手动FreeCreate(Owner)时由容器等之类的(比如Application,MainForm)管理它的生命周期,一般可以不用手动Free推荐你看看 刘艺 <<Delphi面向对象编程思想>> label在TScrollBox里为什么显示不了 delphi7.0中f1book的使用? delphi2010中clientdataset的field name missing 高手帮忙来看看 拜托了,dx9下载后改如何使用?是只有在安装游戏前安它才有效吗? 在用SQL语句查询时怎么显示字段为空的记录啊 如何用QR的QRGROUP实现这个格式? 大家都用什么工具来调试SQL语句 一个关于ADOTABLE控件的一个问题,等着大家来救命! 图文混排 关于webbrowser的简单问题 在Delphi中怎么对ExcelApplication操作?
var
SL: TStringList;
begin
...
SL := TStringList.Create;
try
...
finally
SL.Free;
end;
end;
你可以自己写代码实现智能指针(引入接口)
不知道明白没有,呵呵
自己写代码实现智能指针(引入接口) <--是一个怎样的思路,能否说说?
if A<>nil then
A.Destory;
调用free比调用Destory安全,它避免了访问悬空指针
系统free;
自己建的对象
自己free;
想帮系统一把的话,就把系统建的对象free(一般没必要)。
一般不用Destory,因为free比较安全,原因楼上5层已经说过了1
// YourObject.Free;
// YourObject := Nil;
例如:Tstringlist就只有Create方法
2.如果是Create(Owner)创建控件,那么当Owner为nil的需要手动free,而Owner为Application或者self、具体的控件对象时,一般根据它的生存期来决定是否手动释放(手动释放可以及时回收资源),当然也可以不手动释放,它会跟随Application、self对象、具体的控件对象释放时自动释放。
例如:
Opendialog:=Topendialog.create(nil)的需要进行Opendialog.free;
Opendialog:=Topendialog.create(Application)当应用程序退出的时候会自动释放
Opendialog:=Topendialog.create(self)当self释放的时候会自动释放
Opendialog:=Topendialog.create(panel)当panel释放的时候会自动释放这里比较复杂的是self对象,最好你找本书看看,delphi精要里有详细的讲解,你可以参考一下。
Create(Nil)时要自己手动Free
Create(Owner)时由容器等之类的(比如Application,MainForm)管理它的生命周期,
一般可以不用手动Free
推荐你看看 刘艺 <<Delphi面向对象编程思想>>