Einzelnen Beitrag anzeigen

Benutzerbild von BUG
BUG

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

AW: [Tutorial] Den Destruktor verstehen

  Alt 20. Apr 2012, 00:00
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.
  Mit Zitat antworten Zitat