看看这段代码有没有内存泄露?
看看这段代码有没有内存泄露? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061219185953114.html
类方法:
function TAdoHelper.GetDataSet(sqlstr: string; params: TStrings): TDataSet;
var
TempQuery: TAdoQuery;
begin
TempQuery:= TAdoQuery.Create(nil);
TempQuery.Connection:= FConnector;
TempQuery.Close;
TempQuery.SQL.Clear;
TempQuery.SQL.Add(sqlstr);
TempQuery.Prepared;
FillParameters(TempQuery,Params);
TempQuery.Open;
result:= TempQuery;
end;
客户端:
result:= MySqlHelper.GetDataSet(SQL_GetUserDataSet);
这样返回临时对象的引用,函数内部的临时对象tempquery何时释放?如果不释放会不会造成内存泄露?
http://www.delphi2007.net/DelphiBase/html/delphi_20061219185953114.html
类方法:
function TAdoHelper.GetDataSet(sqlstr: string; params: TStrings): TDataSet;
var
TempQuery: TAdoQuery;
begin
TempQuery:= TAdoQuery.Create(nil);
TempQuery.Connection:= FConnector;
TempQuery.Close;
TempQuery.SQL.Clear;
TempQuery.SQL.Add(sqlstr);
TempQuery.Prepared;
FillParameters(TempQuery,Params);
TempQuery.Open;
result:= TempQuery;
end;
客户端:
result:= MySqlHelper.GetDataSet(SQL_GetUserDataSet);
这样返回临时对象的引用,函数内部的临时对象tempquery何时释放?如果不释放会不会造成内存泄露?
关注!
如果客户端的result没有free的话,会产生内存泄漏,即分配给tempquery的内存块没有了引用。
对于class类型的返回值,建议改成过程,使用变参传入。
function TAdoHelper.GetDataSet(sqlstr: string; params: TStrings): TDataSet;
begin
Result := TAdoQuery.Create(nil);
with Result do
begin
Connection:= FConnector;
Close;
SQL.Clear;
SQL.Add(sqlstr);
Prepared;
FillParameters(Result,Params);
Open;
end;
end;
客户端:
AdataSet := MySqlHelper.GetDataSet(SQL_GetUserDataSet);
....
ADataSet.Free; // 这样就干净了。。
恩,楼上说的是对的。这样做,应该是可以的。。