2010-04-24 10 views
6

Pytanie mniej więcej mówi wszystko. Biorąc pod uwagę następujący zapis struktura:Czy muszę przydzielać i usuwać rekordy podczas używania TList <T> w Delphi?

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

jest następujący kod jest ważny?

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; 

Czy muszę używać GetMem/FreeMem przydzielić i wolne rejestruje wystąpienie TPersonList, czy jestem wolny bezpośredni dostęp do TPersonList wpisy bezpośrednio? Mój żołądek mówi, że kod powinien być ważny, chociaż nie jestem pewien, czy są jakieś zmarszczki związane z inicjowaniem lub finalizacją rekordu.

Odpowiedz

10

Twój kod jest w porządku. Gdy korzystasz z Tlist<T> z rekordami, traktuje się je jako typy wartości do skopiowania. Nie ma potrzeby przydzielania dla nich wskaźników.

+0

Awesome. Dziękuję Ci! Teraz muszę zdecydować, czy rekordy lub klasy będą miały większy sens w użyciu dla moich obiektów biznesowych. – afrazier

1

Pytanie brzmi: Dlaczego pan zadeklarować PPerson? Upewnij się, że przypadkowo nie zwalniasz pamięci TRecord z listy, do której wskazywałeś w zmiennej PPerson.

+0

To zły stary nawyk bardziej niż cokolwiek innego. – afrazier

Powiązane problemy