由用户显示Create的对象是需要的,但Delphi自己创建的就不必要,除非你刻意要释放那个对象
解决方案 »
- 简单的一个SOCKET API(sendto)的测试,怎么就发不出去呢?
- 急!!!请问各位 delphi6的注册码是多少?谢谢
- 为什么我的fastreport在使用adoquery做数据源的时候就总是重复打印地一条记录?
- 估计没多少人会。Corba问题。
- 请教一个数据库查询的问题!
- tchart控件的问题高手帮忙
- 怎样写一个txt文件
- 如何知道一个组件是否有指定的属性?
- 我的子MDI子窗体是静态的,为什么我一运行MDI窗体,子窗体就全部显示出来了?
- 怎样知道当前窗口是那个EXE文件运行时创建的?
- 如何建立一个表,一个字段是声音的名字,另一个是声音文件(wav)?????????????????????
- 一个初学者请叫一个画板程序问题(后附带有原带码)
因为参数已经指定了所有者,如果owner释放的话,此对象就会自动free.
如果是nil,则自身自灭吧,就向celeronII(抽烟的鱼)说的那样
例如:
var
btn : TButton;
begin
btn := TButton.Create(self);
try
btn.Parent := Self;
btn.OnClic := Click;
......
finally
btn.Free;
end;
end;
包括
var
btn : TButton;
begin
btn := TButton.Create(self);
try
btn.Parent := Self;
btn.OnClic := Click;
......
finally
btn.Free;
end;
end;
则需要写destroy
而free则是调用destroy的安全手段而已
Function FunRead:tstringlist;
var
mylist:tstringlist;
begin
mylist:=tstringlist.create;
try
mylist.add('1');
mylist.add('2');
result:=mylist
finally
mylist.free;
end;
end;procedure tform1.button1onclick(sender:tobject);
var
mylist:tstringlist;
begin
mylist:=tstringlist.create;
mylisr:=funRead;
memo1.lines.addstrings(mylist);
end;在执行到memo1那句前funread中的mylist已经被释放了.
只能用全局变量来解决这个问题吗?大家有什么好方法?
var
btn : TButton;
begin
btn := TButton.Create(self);
try
btn.Parent := Self;
btn.OnClic := Click;
......
finally
btn.Free;
end;
end;TButton一般不会一创建就Free吧,可以在Form的onDestroy事件中Free,
另:
Function FunRead:tstringlist;
var
mylist:tstringlist;
begin
if not assigned(mylist) then
mylist:=tstringlist.create;
try
mylist.add('1');
mylist.add('2');
result:=mylist
except
mylist.free;
end;
end;procedure tform1.button1onclick(sender:tobject);
var
mylist:tstringlist;
begin
mylist:=tstringlist.create;
mylisr:=funRead;
memo1.lines.addstrings(mylist);
myList.Free;
end;
比如:创建一个动态的菜单时,就可能用不着你Free了
不过用create建对象最好不要用nil做为参数,用Self或Application。
这样当其Owner释放,动态创建的对象也就释放了
1、系统自动创建。就象窗体的控件。
2、在Create时指定了Owner的对象。这类对象在Owner释放的时候会自动释放。其他情况需要自己释放。