함수 결과로 무료 TStringlist?
Sep 09 2020
내가 호출하는 함수가 TStringList()를 반환하고 TStringList.Create변수에 할당하지 않고 직접 한 번 사용하면 (예 Data:=MyTStringFunction.Values['data'];:) 메모리 누수가 발생합니까 아니면 TStringList가 자동으로 해제됩니까?
답변
4 DalijaPrasnikar Sep 09 2020 at 02:53
함수가 새 문자열 목록을 생성하면 코드가 누출됩니다.
function MyTStringFunction: TStringList;
begin
// constructing new string list
Result := TStringList.Create;
...
end;
반환 된 목록의 값을 변수에 저장하고 Free완료 한 후에 저장해야합니다.
var
List: TStringList;
List := MyTStringFunction;
try
Data := List.Values['data'];
finally
List.Free;
end;
참고 : Delphi 10.3 Rio는 여전히 모바일 컴파일러에 ARC 객체 관리 를 사용하므로 위 코드가 ARC 플랫폼 (iOS, Android)에서 엄격하게 실행되면 유출되지 않습니다. 그러나 코드가 비 ARC 플랫폼 (Windows, Linux, macOS)에서 실행되어야하거나 Delphi 10.4로 업그레이드 된 Free경우에는 호출해야합니다. 이러한 코드는 모든 플랫폼에서 제대로 작동합니다.