Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#19

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 15:14
Tut mir leid, ich halte Vieles von dem, was hier gepostet wurde, für überflüssig und irreführend. Jede Klasse sollte sich 'um seinen eigenen Kram' kümmern, und zwar so (eigentlich ganz einfach):

Delphi-Quellcode:
type TKlasseA = class
    a: integer; //irgend ein Feld, ist ja egal, was es genau ist
  end;
  TKlasseB = class
  Private
    FKlasseA: TKlasseA;
  Public
    Constructor Create;
    Destructor Destroy; Override;
    Property ZugriffAufA : TKlasseA Read FKlasseA;
  end;
  TSuperKlasse = class
  Private
    FKlasseB: TKlasseB;
  Public
    Destructor Destroy; Override;
    Property ZugriffAufB : TKlasseB Read FKlasseB;
  end;

Constructor TKlasseB.Create;
Begin
  Inherited Create; // unnötig, schadet aber nicht
  KlasseA := TKlasseA.Create; // Was ich erschaffe ...
End;

Destructor TKlasseB.Destroy; // <--hier war ein kleiner Rechtschreibfehler
Begin
  FreeAndNil (KlasseA); // ... zerstöre ich auch wieder ...
  Inherited;
End;

Constructor TSuperKlasse.Create;
Begin
  Inherited Create; // unnötig, schadet aber nicht
  KlasseB := TKlasseB.Create; // Was ich erschaffe ...
End;

Destructor TSuperKlasse.Destroy;
Begin
  FreeAndNil (KlasseB); // ... zerstöre ich auch wieder ...
  Inherited;
End;
Vorausgesetzt, ich hab hier keinen Bockmist gemacht, klappt das Immer. Ohne BeforeDestruction oder AfterDestruction. Wenn man das als eiserne Regel befolgt ("Was ich erschaffe, zerstöre ich auch") und dann noch Resourcenschutzblöcke (Try..Finally) verwendet, baut auch sichere, also stabile und exploitresistente(re) Programme.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat