So würde ich das ansatzweise machen. Minimale Implementation:
Delphi-Quellcode:
type
// Du nimmst natürlich Deinen Record
TDataRecord = record
Name : string[20];
Zahl : Integer;
end;
PDataRecord = ^TDataRecord;
TDataRecordList = class(TList)
protected
function GetItem(AIndex: Integer): PDataRecord;
procedure SetItem(AIndex: Integer; const Value: PDataRecord);
public
function Add(AData: TDataRecord): Integer;
procedure Clear; override;
property Items[AIndex : Integer] : PDataRecord read GetItem write SetItem; default;
end;
implementation
{ TDataRecordList }
function TDataRecordList.Add(AData: TDataRecord): Integer;
var
PData : PDataRecord;
begin
New(PData);
// Record-Inhalt kopieren (evtl. auch mit move). So bleibt Erzeugung und Freigabe in der Klasse.
// Natürlich könnte man ein Overload von Add mit PData machen.
PData.Name := AData.Name;
PData.Zahl := AData.Zahl;
Result := inherited Add(PData);
end;
procedure TDataRecordList.Clear;
var
PData : PDataRecord;
I : Integer;
begin
for I := 0 to Count - 1 do
begin
PData := Items[I];
Dispose(PData);
end;
inherited;
end;
// Setter und Getter geben jeweils wieder den Pointer zurück, um sich Kopiervorgänge zu ersparen
function TDataRecordList.GetItem(AIndex: Integer): PDataRecord;
begin
Result := inherited Items[AIndex];
end;
procedure TDataRecordList.SetItem(AIndex: Integer; const Value: PDataRecord);
begin
inherited Items[AIndex] := Value;
end;