Delphi-Quellcode:
Kreis := TPartnerObject.Create;
Kreis.Partner := TPartnerObject.Create;
Kreis.Partner.Partner := Kreis;
Stiel := TPartnerObject.Create;
Stiel.Partner = Kreis;
Stiel.free(); // Stackoverflow? (Ungetestet: hab grad kein Delphi zur Hand)
Wuhaha, Kreis am Stiel
Eine Variante, die auch dieses Problem lösen sollte:
Delphi-Quellcode:
TPartnerObject = class(TObject)
private
FDieing: boolean;
protected
FPartner: TPartnerObject;
public
constructor Create;
destructor Destroy; override;
property Partner: TPartnerObject read FPartner write FPartner;
end;
constructor TPartnerObject.create;
begin
FDieing := false;
FPartner := nil;
end;
destructor TPartnerObject.Destroy;
begin
FDieing := true;
if assigned(Partner) then
if not FPartner.Dieing then
FPartner.Destroy; // ist schon auf nil überprüft
inherited;
end;
Das würde bei auch mehreren Partnern funktionieren und entspricht der Tiefensuche in einem Graphen.