Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objekt in Array registrieren (https://www.delphipraxis.net/23695-objekt-array-registrieren.html)

Dannyboy 8. Jun 2004 10:13


Objekt in Array registrieren
 
Hallo zusammen,
folgende Situation:
Delphi-Quellcode:
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;
Bin mir nicht sicher, ob bei Möglichkeit "1)" eine Kopie des Objektes
angelegt wird oder ob eine Referenz erstellt wird. Wie würdet ihr denn
eine Referenz in das Array eintragen :gruebel:

shmia 8. Jun 2004 10:57

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);

Touchdown 8. Jun 2004 10:58

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!

Dannyboy 8. Jun 2004 11:23

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.

Dannyboy 8. Jun 2004 11:28

Re: Objekt in Array registrieren
 
Zitat:

Zitat von Touchdown
Nimm die erste Variante, die zweite sollte nicht zu kompilieren sein.

Bist Du Dir sicher, dass die erste Variante KEINE Kopie des
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.

shmia 8. Jun 2004 12:21

Re: Objekt in Array registrieren
 
Zitat:

Zitat von Dannyboy
Bist Du Dir sicher, dass die erste Variante KEINE Kopie des
Objektes erstellt, sondern eine Referenz :gruebel:

Ganz sicher !
Zitat:

Zitat von Dannyboy
Meine Objekte haben nämlich Beziehungen zueinander,
daher kann ich keine Kopie eines Objektes nehmen, da sonst die Beziehung
nicht übertragen werden würden.

Um Objekte zu kopieren musst du deine Klassen von TPersistent ableiten und die Methode Assign
ü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:
// 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;
Dies ist effektiver, als erst ein leeres Objekt zu erzeugen und dann mit Assign zu kopieren.

Dannyboy 8. Jun 2004 12:36

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:

Chewie 8. Jun 2004 15:44

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 16:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz