这段代码是否安全,不会出现内存泄漏?
我想知道
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;
是否有潜在危害,而忽略了第一个对象,将其保留在内存中?
ReportMemoryLeaksOnShutdown := True;
,这样当你的应用程序关闭时就会显示任何内存泄漏。正如其他人指出的那样,这将报告一个泄漏的TStringList
对象。 - Jerry Dodge