Hallo sH17,
es funkt beste Sahne mit dem Clonen.
Hab auch die constructoren aus beiden TObjectList entfernt.
Ein bisschen unwohl ist mir noch bei dieser Sache, weil ich noch nicht
sattelfest bin in
OOP. (Ich habe es bis jetzt umgehen können.
)
Wenn ich das free der TObjectList aufrufe werden dann auch alle
geklonte items gelöscht?
Ist es eigentlich Möglich memory leaks zu finden?
Hier noch meine drei Klassen. Wenn es Dir möglich währe nochmals drüber zu schauen.
Besten Dank nochmals sH17 und schöne Grüße.
Delphi-Quellcode:
TCarPos = class(TObject)
private
FZeitpunkt:TDateTime;
FCarID:integer;
Procedure SetZeitpunkt(value :TDateTime);
function GetZeitpunkt:TDateTime;
Procedure SetCarID(value :Integer);
function GetCarID:Integer;
public
constructor Create;
property Zeitpunkt: TDateTime read GetZeitpunkt write SetZeitpunkt;
property CarID: Integer read GetCarID write SetCarID;
procedure AssignTo(var Dest : TCarPos);
function Clone: TCarPos;
end;
TCarPosCollection =Class(TObjectList)
private
FZustand:Boolean;
function Get(Index: Integer): TCarPos;
public
procedure Add(Item: TCarPos);
property Items[Index: Integer]: TCarPos read Get;
procedure AssignTo(var Dest : TCarPosCollection);
function Clone: TCarPosCollection;
end;
TTagesauswertung =Class(TObjectList)
private
function Get(Index: Integer): TCarPosCollection;
public
procedure Add(Item: TCarPosCollection);
property Items[Index: Integer]: TCarPosCollection read Get;
end;
{ TCarPos }
constructor TCarPos.Create;
begin
FZeitpunkt:=0.0;
FCarID:=0;
end;
procedure TCarPos.AssignTo(var Dest: TCarPos);
begin
Dest.FZeitpunkt := FZeitpunkt;
Dest.FCarID := FCarID;
end;
function TCarPos.Clone: TCarPos;
begin
result := TCarPos.Create;
AssignTo(result);
end;
{ TCarPosCollection }
procedure TCarPosCollection.Add(Item: TCarPos);
begin
inherited Add(Item);
end;
function TCarPosCollection.Get(index: integer):TCarPos;
begin
result := inherited Get(Index);
end;
procedure TCarPosCollection.AssignTo(var Dest: TCarPosCollection);
var
i:integer;
begin
Dest.FZustand := FZustand;
{kopiere alle items vom typ TCarPos}
for i := 0 to count-1 do
Dest.add(items[i].clone);
end;
function TCarPosCollection.Clone: TCarPosCollection;
begin
result := TCarPosCollection.Create;
AssignTo(result);
end;
{ TTagesauswertung }
procedure TTagesauswertung.Add(Item: TCarPosCollection);
begin
inherited Add(Item);
end;
function TTagesauswertung.Get(index: integer):TCarPosCollection;
begin
result := inherited Get(Index);
end;