[英]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.