Die Umstellung auf einen Referenztyp ist für dieses Problem oft die einfachste und schnellste Lösung, aber nicht unbedingt die Beste.
Delphi-Quellcode:
type
TStrArray = array of string;
PJobData = ^TJobData;
TJobData = record
Name: string;
uid: integer;
sources: TStrArray;
procedure Assign(const AItem: TJobData);
end;
TJobList = class(TObject)
private
fJobs: array of TJobData;
procedure SetJob(jobIndex: integer; job: PJobData);
function GetJob(jobIndex: integer): PJobData;
public
property Jobs[jobIndex: integer]: PJobData read GetJob write SetJob;
end;
implementation
procedure TJobData.Assign(const AItem: TJobData);
begin
Name := AItem.Name;
uid := AItem.uid;
// damit sources und AItem.sources nicht auf das selbe Array verweisen
// und nachfolgende Änderungen von AItem.sources keine Auswirkungen auf sources haben
sources := Copy(AItem.sources);
end;
procedure TJobList.SetJob(jobIndex: integer; job: PJobData);
begin
{...}
// fJobs[i] := job^;
fJobs[i].Assign(job^);
end;
function TJobList.GetJob(jobIndex: integer): PJobData;
begin
{...}
Result := @(fJobs[i]);
end;
joblist.Jobs[1]^.Name := joblist.Jobs[1]^.Name + ' TEST';