我的做法正确吗?
我正在使用记录填充TStringList中的对象,我在填充过程中创建这些记录。
我已经将TStringList.OwnsObjects设置为true。但是,当我关闭应用程序时,会发生访问冲突。以下是我的代码摘录。
type
PUsageData = ^TUsageData;
TUsageData = record
DeclaredIn: String;
LineNumber: Integer;
TotalUsage: Integer;
end;
...
var VarUsages: TStringList; // object contains a TUsageData record
procedure BuildUsageList;
var idx, idy, n,m: Integer;
sl: TStringList;
s,t: String;
rec: PUsageData;
begin
VarUsages.Clear;
sl:= TStringList.Create;
s := '';
// First make a list and create a record for each variable declared in program
for idx := 0 to IncludeList.Count -1 do begin
GetSource(IncludeList[idx], sl);
for idy := 0 to sl.Count -1 do begin
t := '';
t := CodeAnalyser.GetItems(sl[idy], caVariables);
if t > '' then begin
system.New(Rec);
rec.DeclaredIn := IncludeList[idx];
rec.LineNumber := idy;
rec.TotalUsage := 0;
VarUsages.AddObject(t, TObject(rec));
end;
end;
end;
end;
...
initialization
VarUsages := TStringList.Create;
VarUsages.OwnsObjects := true;
finalization
VarUsages.Free;
end.
我正在使用Delphi 10.1。
我也想知道当我清空StringList时会发生什么。它会处理Objects吗?
TList<TUsageData>
。尽管现在字符串列表大多数都是多余的。 - David Heffernan