【发布时间】:2013-10-29 04:38:47
【问题描述】:
这段代码对内存泄漏安全吗?
s := TStringList.Create; // create first object
try
// Here line comes that seems to be dangerous
s := GetSomeSettings; // Overrides reference to first object by second one
finally
s.free; // Destroying only second object, leave first object to live somewhere in memory
end;
function GetSomeSettings : TStringList;
var
rawString : string;
settings : TStringList;
begin
// Singleton pattern implementation
// Trying to find already existing settings in class variable
settings := TSettingsClass.fSettings;
// If there is no already defined settings then get them
if not Assigned(settings) then
begin
GetSettingsInDB(rawString);
TSettingsClass.fSettings := ParseSettingsString(rawString);
settings := TSettingsClass.fSettings;
end;
Result := settings;
end;
我想知道s := GetSomeSettings; 可能有害并忽略第一个对象,将其保留在内存中?
【问题讨论】:
-
只需将第一段代码替换为 s := GetSomeSettings
-
为什么不检查内存泄漏呢?您可以使用 FastMM,或者如果您的 Delphi 版本支持它,在应用程序启动时,
ReportMemoryLeaksOnShutdown := True;并且当您的应用程序关闭时您将看到任何内存泄漏。正如其他人指出的那样,这将报告 x1TStringList对象泄漏。
标签: delphi memory optimization memory-management memory-leaks