簡體   English   中英

免費 TStringlist 作為函數結果?

[英]Free TStringlist as function result?

如果我調用的函數返回一個TStringList (帶有TStringList.Create )並且我沒有將它分配給一個變量而是直接使用它一次(例如Data:=MyTStringFunction.Values['data']; ),我將有一個記憶-leak 還是會自動釋放 TStringList?

如果該函數創建了一個新的字符串列表,那么您的代碼將會泄漏。

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 此類代碼將在所有平台上正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM