Delphi-Quellcode:
property Items[Index: integer]: PStab read GetPItems write SetPItems; default;
function TStabList.GetPItems(Index: integer): PStab;
begin
Result := @FItems[Index];
end;
procedure TStabList.SetPItems(Index: integer; const Value: PStab); // Assign;
begin
FItems[Index] := Value^;
end;
Den Schreibzugriff würde ich schnell wieder streichen.
Wenn ich als Benutzer deines Records `Liste[i] := PtrToSomeRecord` schreibe, ist das von der Syntax her eine flache Kopie von Referenzen/Zeigern, die du mittels `SetPItems` zu einer tiefen Kopie machst. Das halte ich für sehr verwirrend. Die Alternative wäre:
Delphi-Quellcode:
property Items[Index: integer]: PStab read GetPItems; default;
function TStabList.GetPItems(Index: integer): PStab;
begin
Result := @FItems[Index];
end;
// Benutzung:
Liste[i]^ := PtrToSomeRecord^;
Das erfordert zwei Haken mehr, dafür ist eindeutig klar, was passiert.