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.