TStringlist gratis como resultado de la función?

Sep 09 2020

Si una función a la que llamo devuelve un TStringList(con a TStringList.Create) y no la asigno a una variable, pero la uso una vez directamente (como Data:=MyTStringFunction.Values['data'];), ¿tendré una pérdida de memoria o se liberará TStringList automáticamente?

Respuestas

4 DalijaPrasnikar Sep 09 2020 at 02:53

Si la función crea una nueva lista de cadenas, su código se filtrará.

function MyTStringFunction: TStringList;
begin
  // constructing new string list
  Result := TStringList.Create;
  ...
end;

Debe almacenar el valor de la lista devuelta en una variable y Freeluego de haber terminado.

var
  List: TStringList;

List := MyTStringFunction;
try
  Data := List.Values['data'];
finally
  List.Free;
end;

Nota: Dado que Delphi 10.3 Rio todavía usa la administración de objetos ARC para sus compiladores móviles, si el código anterior se ejecuta estrictamente en plataformas ARC (iOS, Android), no se filtrará. Pero si el código debe ejecutarse en plataformas que no son ARC (Windows, Linux, macOS), o alguna vez se actualiza a Delphi 10.4, entonces Freedebe llamarse. Dicho código funcionará correctamente en todas las plataformas.