6

这个问题或多或少说明了一切。给定以下记录结构:

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条目?我的直觉说代码应该是有效的,但我不确定是否存在与记录初始化或终结相关的任何问题。

4

2 回答 2

10

你的代码没问题。当您Tlist<T>与记录一起使用时,它将它们视为值类型,以进行复制。无需为它们分配指针。

于 2010-04-24T01:56:57.283 回答
1

问题是:为什么要声明 PPerson?确保您不会意外尝试从您在 PPerson 变量中指向的列表中释放 TRecord 的内存。

于 2010-04-24T17:49:29.843 回答