如何解决免费的TStringlist作为函数结果?
如果我调用的函数返回一个TStringList
(带有TStringList.Create
),而我没有将其分配给变量,而是直接使用一次(例如Data:=MyTStringFunction.Values['data'];
),内存泄漏,还是会自动释放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 object management用于其移动编译器,因此,如果以上代码严格在ARC平台(iOS,Android)上运行,则不会泄漏。但是,如果代码必须在非ARC平台(Windows,Linux,macOS)上运行,或者曾经升级到Delphi 10.4,则需要调用Free
。这样的代码将在所有平台上正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。