看看这段代码,是否会存在内存泄漏的问题! ( 积分: 20 )

  • 主题发起人 主题发起人 searoom
  • 开始时间 开始时间
自己建立的对象,最好自己释放,这是一个好习惯。
而且最好将接收对象以参数的形式传进来操作
procedure TUserMaint.GetDepList(listbox: Tlistbox);
var
i: Integer;
tmpstrs: TStrings;
begin
tmpstrs:=TStringlist.Create;

with UserDM do
try
if not adcUser.Connected then
adcUser.Connected:=True;
adqTemp.sql.Clear;
adqTemp.sql.add('select * from M_BMBM');
adqTemp.Open;
for i:=1 to adqTemp.RecordCount do
begin
tmpstrs.Add(adqTemp.Fieldbyname('BMMC').AsString);
adqTemp.Next;
end;
adqTemp.Close;
listbox.items:=tmpstrs;
tmpstrs.free;
finally
adcUser.Connected:=False;
end;
end;
 
另外一个比较好的方法,即可避免忘记释放对象,又可作为函数,参与语句的一部分,如下:

function TUserMaint.GetDepList(tmpstrs: TStrings):TStrings;
var
i: Integer;
begin
with UserDM do
try
if not adcUser.Connected then
adcUser.Connected:=True;
adqTemp.sql.Clear;
adqTemp.sql.add('select * from M_BMBM');
adqTemp.Open;
for i:=1 to adqTemp.RecordCount do
begin
tmpstrs.Add(adqTemp.Fieldbyname('BMMC').AsString);
adqTemp.Next;
end;
adqTemp.Close;
finally
adcUser.Connected:=False;
end;
[red]result:=tmpstrs;[/red]//按如此处理即可。
end;

说明:函数内部返回对象的方法,并没有错误,但容易引起对象释放的遗忘,从而产生内存泄漏。一般情况下不提倡,除非使用者自己完全清楚。
 
谢谢各位了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
937
SUNSTONE的Delphi笔记
S
G
回复
4
查看
597
guoleimail
G
后退
顶部