Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
Turbo Delphi für Win32
|
Re: Objekte in Klassen: Was wird alles zerstört?
27. Nov 2005, 15:54
Zitat von alzaimar:
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
KlasseA: TKlasseA;
Public
Constructor Create;
Destructor Destroy; Override;
Property ZugriffAufA : TKlasseA Read KlasseA;
end;
TSuperKlasse = class
KlasseB: TKlasseB;
Public
Destructor Destroy; Override;
Property ZugriffAufB : TKlasseB Read KlasseB;
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 Du schon properties einführst dann solltest Du vielleicht die Variablen KlasseB und KlasseA als privat deklarieren.
Günter Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
|
|
Zitat
|