Я должен выделить и свободные записи при использовании TList <T> в Delphi?

Вопрос более или менее говорит все это. Учитывая следующую рекордную структуру:

type
    TPerson = record
        Name: string;
        Age: Integer;
    end;
    PPerson = ^TPerson;
    TPersonList = TList<TPerson>;

Действительно ли следующий код действителен?

procedure ReadPeople(DataSet: TDataSet; PersonList: TPersonList);
begin
    PersonList.Count := DataSet.RecordCount;
    if DataSet.RecordCount = 0 then
        Exit;

    DataSet.First;
    while not DataSet.Eof do begin
        PersonList[DataSet.RecNo].Name := DataSet.FieldByName('Name').AsString;
        PersonList[DataSet.RecNo].Age := DataSet.FieldByName('Age').AsInteger;
        DataSet.Next;
    end;
end;

Сделайте я должен использовать GetMem/FreeMem выделить и освободить записывают экземпляр TPersonList, или действительно ли я свободен к непосредственно доступу TPersonList записи непосредственно? Мой пищеварительный тракт говорит, что код должен быть действительным, хотя я не уверен, существуют ли какие-либо морщины, связанные с рекордной инициализацией или завершением.

6
задан afrazier 24 April 2010 в 01:04
поделиться

2 ответа

Ваш код в порядке. Когда вы используете Tlist с записями, он обрабатывает их как типы значений, подлежащие копированию. Для них не нужно выделять указатели.

10
ответ дан 9 December 2019 в 22:30
поделиться

Вопрос: почему вы объявляете PPerson? Убедитесь, что вы случайно не пытаетесь освободить память TRecord из вашего списка, на который вы указывали в переменной PPerson.

1
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: