2010-04-24 17 views
6

Daha fazla veya daha az soru her şeyi açıklıyor. Aşağıdaki kayıt yapısı göz önüne alındığında: Aşağıdaki kod geçerli midir? TList <T> Delphi kullanırken kayıtlar ayırmak ve kayıt yaptırmak zorunda mıyım?

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; 

Ben GetMem/ FreeMem tahsis etmek ve ücretsiz TPersonList bir örneğini kaydeden kullanmak zorunda mıyım, yoksa doğrudan doğrudan TPersonList girdileri erişmek için serbest ben? Benim bağırsağım, kodun geçerli olması gerektiğini söylese de, kayıt başlatma veya sonlandırma ile ilgili herhangi bir kırışıklık olup olmadığından emin değilim.

cevap

10

Kodunuz güzel. Tlist<T>'u kayıtlarla kullandığınızda, bunların kopyalanacağı değer türleri olarak değerlendirir. Onlar için işaretçi ayırmaya gerek yok.

+0

Harika. Teşekkür ederim! Artık kayıtlar veya sınıflar benim iş nesneleri için kullanmak için daha mantıklı olup olmayacağına karar vermeliyim. – afrazier

1

Soru: Neden PPerson'ı beyan ediyorsunuz? Yanlışlıkla bir PPore değişkeninde işaret ettiğiniz listeden bir TREcord belleği ayırmaya çalıştığınızdan emin olun.

+0

Bu, her şeyden çok kötü eski bir alışkanlıktır. – afrazier

İlgili konular