Einzelnen Beitrag anzeigen

Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Objektreferenz als Paramter

  Alt 15. Jun 2012, 00:35
Hi,

momentan übergibst du eine Objektreferenz (bzw. nil, wenn du das Objekt noch nicht erzeugt hast).
Das was du vorhast, lässt sich mit einer Referenz auf eine Objektreferenz lösen.
Delphi-Quellcode:
type
  TKlasse1 = class(TObject)
    // viele Variablen, Funktionen, Prozeduren und so ...
  end;
  PKlasse1 = ^TKlasse1;

  TKlasse2 = class(TObject)
    // auch viele Variablen, Funktionen, Prozeduren und so ...
    fKlasse1: PKlasse1;
    constructor Create(Klasse1: PKlasse1);
  end;

constructor TKlasse2.Create(Klasse1: PKlasse1);
begin
  //...
  fKlasse1:=Klasse1;
end;
Delphi-Quellcode:
type
  TForm1=class(TForm)
    //...
    Klasse1:TKlasse1;
    Klasse2:TKlasse2;
    //...
  end;

  // ...
  Variable2:=TKlasse2.Create(@Klasse1);
  // ...
  Variable1:=TKlasse1.Create;
Das Problem ist offensichtlich: Sollte Variable1 * zerstört werden **, funktioniert das Objekt der Klasse2 nicht mehr. Das fällt einem irgendwann garantiert nochmal auf die Füße.
Um das zu vermeiden, könnte man ein Interface erstellen, das Variable1 * kapselt und wegen der Referenzzählung erst zerstört wird, wenn das Objekt der Klasse2 auch verstört ist ***.

Zusammenfassend: Es es möglich, aber schön ist es nicht.

* Also die Referenz auf das Objekt der Klasse1.
** Z.B. weil es eine lokale Variable war oder das enthaltende Objekt (-> Form1) zerstört wurde.
*** Wohlgemerkt: das Objekt der Klasse1 kann da schon längst zerstört sein


Jetzt kann ich natürlich die Sache so umbauen, daß die Klasse2 immer vorher erzeugt wird - aber das ist im aktuellen Fall erstens nicht schön und zweitens interessiert mich, ob ich wirklich auf'm Schlauch steh oder ob das irgendwie geht...
Wenn du magst, kannst du ja noch mal genauer beschreiben, warum das im aktuellen Fall unschön ist. Vielleicht gibt es noch eine schönere Lösung.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (15. Jun 2012 um 00:37 Uhr)
  Mit Zitat antworten Zitat