То, как вы делаете это сейчас, прекрасно.
Вы не можете сделать это с записью, не выделяя память, когда добавляете новую запись в TStringList.Objects
, и впоследствии вам придется ее освобождать. Вы так же хорошо используете класс, как и сейчас; Вы должны освободить объекты перед освобождением списка строк. (В более поздних версиях Delphi TStringList
имеет свойство OwnsObjects
, которое автоматически освобождает их для вас, когда список строк свободен, но его нет в Delphi 7.)
Если вы действительно хотите сделать это с записью, вы можете:
type
PRec = ^TRec;
TRec = record
str: string;
num: Integer;
end;
var
rec: PRec;
begin
for i := 0 to 9 do
begin
System.New(Rec);
rec.str := 'rec' + IntToStr(i);
rec.num := i*2;
Alist.AddObject(IntToStr(i), TObject(Rec)); // how to write here?
end;
end;
Вам нужно будет использовать System.Dispose(PRec(AList.Objects[i]))
для освобождения памяти перед освобождением списка строк. Как я уже сказал, то, как вы делаете это сейчас, на самом деле намного проще; вам не нужно выполнять приведение типов при добавлении и удалении из списка строк.
Кстати, вам не нужен AList.Clear
. Поскольку вы создаете список строк, в нем не может быть ничего для удаления.