Hi, ich habe eine eigene Liste implementiert, diese sollte abstrakt mit beliebigen Objekten als Inhalt arbeiten können. Zur besseren Übersicht gebe ich mal das UML-Diagramm mit (Anhang).
Mein Problem liegt nun in der Übergabe eines Objekts aus dem Hauptprogramm heraus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TFrmMain.BtnAppendClick(Sender: TObject); var C : TContent; begin if Assigned(Liste) then begin if FrmDate.ShowModal = mrOK then begin C := TContent.Create; C.Name := FrmDate.EName.Text; C.Age := StrToInt(FrmDate.EAge.Text); Liste.Append(C); FreeAndNil(C); end; end else ShowMessage('Liste ist nicht vorhanden'); end; |
In der Liste wird das dann wie folgt verarbeitet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TListe.Append (Content: TContent); var NewElement : TElement; begin NewElement := TElement.Create; NewElement.SetContent(Content); if IsEmpty then FRoot := NewElement; else begin while not IsLast do FAktuell := FAktuell.GetNext; FAktuell.SetNext(NewElement); end; FAktuell := NewElement; FAktuell.SetNext(nil); end; |
Das Problem: Offensichtlich schieße ich mir mit FreeAndNil(C) nicht nur das Objekt in der Prozedur des Hauptprogramms, sondern auch das neu erzeugte Objekt der Liste ab. Das könnte daran liegen, dass ich nicht den Inhalt, sondern die Referenzadresse übergebe ... sind halt Zeiger auf Objekte. Nur, wie mache ich das richtig? Ich müsste den Inhalt übergeben, nicht die Referenz ...
Andere Frage dazu: In Delphi gibt es eine Klasse TList und eine Klasse TObjectList ... heißt das (auf meine Problem bezogen), ich kann mit einer "einfachen" Liste gar keine Objekte verwalten?