![]() |
Objekt in Array registrieren
Hallo zusammen,
folgende Situation:
Delphi-Quellcode:
Bin mir nicht sicher, ob bei Möglichkeit "1)" eine Kopie des Objektes
type
TKlasse = class // Klasse // ... end; // ... VAR MeinArray : [0..5] of TKlasse; // ... function irgendEineKlasse.registriereObjekt(Objekt : TKlasse); begin { und an dieser Stelle soll das Objekt aus der Argumentenliste dieser Methode in dem Array <MeinArray> registriert werden. Es soll KEINE Kopie sein, sondern es muss eine REFERENZ sein! } // 1) MeinArray[0]:= Objekt; ??? // 2) MeinArray[0]:= @Objekt; ??? end; angelegt wird oder ob eine Referenz erstellt wird. Wie würdet ihr denn eine Referenz in das Array eintragen :gruebel: |
Re: Objekt in Array registrieren
Alle Objekte in Delphi sind Referenzen (= Zeiger auf die Objekt-Memberdaten).
Ich empfehle Dir, kein Array, sondern ein Objekt der Klasse TObjectList zu verwenden. Zu beachten ist der Konstruktor von TObjectList:
Delphi-Quellcode:
// der Parameter OwnsObjects bewirkt, dass die Objekte nicht "ge-free-ed" werden
// siehe Online-Hilfe RegisteredObjects := TObjectList.Create({OwnsObjects=}False); |
Re: Objekt in Array registrieren
Nimm die erste Variante, die zweite sollte nicht zu kompilieren sein.
Ich perönlich halte von solchen Arrays aber nicht viel, wie wäre es mit einer Instanz von TList oder TStringlist würde auch gehen! |
Re: Objekt in Array registrieren
Hallo ihr beiden,
erst mal danke für Eure Antwort. Ich bin gerade dabei den Huffman-Algorithmus zu implementieren und möchte auf gar keinen Fall auf bereits bestehende Listen von Objekten zugreifen. Möchte das alles vollkommen autonom machen. |
Re: Objekt in Array registrieren
Zitat:
Objektes erstellt, sondern eine Referenz :gruebel: Ich bin gerade auf der Arbeit und habe im Augenblick nicht die Mittel um dies zu testen. Meine Objekte haben nämlich Beziehungen zueinander, daher kann ich keine Kopie eines Objektes nehmen, da sonst die Beziehung nicht übertragen werden würden. |
Re: Objekt in Array registrieren
Zitat:
Zitat:
überschreiben. Damit ist es auch möglich kompliziertere (mit Beziehungen, eingebetteten Unterobjekten) Objekte zu kopieren. Ausserdem kannst du auch den in Delphi wenig gebräuchlichen Copy-Konstruktor implementieren:
Delphi-Quellcode:
Dies ist effektiver, als erst ein leeres Objekt zu erzeugen und dann mit Assign zu kopieren.
// Copy-Konstruktor - eine Kombination aus Objekt erzeugen und kopieren aus übergebenem Objekt
constructor TMeineKlasse.Create(Const source:TMeineKlasse); begin inherited; // hier alle Unterobjekte und Resource erstellen FFont := TFont.Create; // Beispiel // *keine* Eigenschaften voreinstellen wie im "normalen" Konstruktor // da diese beim nachfolgenden Kopieren sowieso überschrieben würden // und kopieren self.Assign(source); end; |
Re: Objekt in Array registrieren
Ok, das mit dem Copyconstruktor und dem Assign leuchtet durchaus ein.
Wäre aber die "Methode" Objekt1 = Objekt2 nicht weniger aufwendig und erfüllt den gleichen Zweck oder gibt es Nachteile :gruebel: |
Re: Objekt in Array registrieren
Objekt1 = Objekt2 würde in Objekt1 eine Referenz auf das Objekt erzeugen, das von Objekt2 referenziert wird.
Also auch keine Kopie. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz