如何才能不重复创建对象? ( 积分: 100 )

  • 主题发起人 主题发起人 hardblue
  • 开始时间 开始时间
H

hardblue

Unregistered / Unconfirmed
GUEST, unregistred user!
象下面这段代码是在一个事件中被触发的,obj是一个自己定义的类
var
a:obj;
begin
a:= obj.crate(nil);
end;
现在的问题是,a必须是局部变量,不能用全局变量。因为这段代码是在事件触发中的,所以每次当事件触的发时候都会重新定义变量a。怎样才能使当obj对象创建并用变量a引用它以后,下次事件触的发的时候 就不再重新定义变量a了呢?
 
象下面这段代码是在一个事件中被触发的,obj是一个自己定义的类
var
a:obj;
begin
a:= obj.crate(nil);
end;
现在的问题是,a必须是局部变量,不能用全局变量。因为这段代码是在事件触发中的,所以每次当事件触的发时候都会重新定义变量a。怎样才能使当obj对象创建并用变量a引用它以后,下次事件触的发的时候 就不再重新定义变量a了呢?
 
既然是局部变量,就不是重复创建对象了
触发事件也是一个方法,当事件结束时,对象a就被释放了
如果想在事件外用a的话必须定义成全局变量
 
事件结束的时候free一把.
 
var
a:TForm;
begin
if not Assigned(a) then
a:= TForm.crate(nil);
 
有个解决办法:
再声明一个全局变量 b : obj
保存创建的a的引用即可!
var
a:obj;
begin
if(b <> nil) then
a := b
else begin
a:= obj.crate(nil);
b := a;
end;

end;
 
既然是局部变量,作用范围只在本过程内,规范的写法应在过程末加free,
保证释放对象而不造成重复
var
a:obj;
begin
a:= obj.crate(nil);
...
a.free;
end;
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部