Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inherited destroy Problem (https://www.delphipraxis.net/36685-inherited-destroy-problem.html)

Jelly 23. Dez 2004 15:53


Inherited destroy Problem
 
Hallo,

ich habe mir eine Basisklasse im Wesentlichen wie folgt definiert (aufs Wesentliche reduziert):
Delphi-Quellcode:
type
 TMCExport = class
  public
      destructor Destroy ; virtual ;
  end ;

implementation
destructor TMCExport.Destroy;
begin
     CloseExportFile ; // erst mal unwichtig, was hier drin steht. Ein textfile soll hier nur geschlossen werden

     inherited Destroy ;
end;
Darauf baut eine Klasse
Delphi-Quellcode:
type
  TMCExport_Radial = class (TMCExport)
  end ;

var
 Radial : TMCExport_Radial ;
mit irgendwelchen klassenspezifischen Funktionen.

Radial wird wie gehabt über Create erzeugt. Klappt auch alles soweit. Der Constructor ist in TMCExport definiert, und wird auch wie gewollt aufgerufen.

Durch Radial.free gebe ich meine Klasse wieder frei. Jetzt sagt mir meine Logik, daß da der Destructor destroy aus TMCExport aufgerufen werden soll... Tut er aber nicht.

Was mach ich da falsch?

mirage228 23. Dez 2004 15:55

Re: Inherited destroy Problem
 
Hi,

müsste es hinter dem Destroy der Basisklasse nicht override heißen (es ist ja bereits in TObject virtuell)?

mfG
mirage228

Jelly 23. Dez 2004 15:58

Re: Inherited destroy Problem
 
Danke mirage, jetzt klappts... Aber verstanden hab ichs nicht. Den Konstructor hab ich doch auch virtual deklariert, und der wird aber aufgerufen... Ich dacht, bei free wird automatisch der Destructor aufgerufen.

mirage228 23. Dez 2004 16:08

Re: Inherited destroy Problem
 
Zitat:

Zitat von Jelly
Danke mirage, jetzt klappts... Aber verstanden hab ichs nicht. Den Konstructor hab ich doch auch virtual deklariert, und der wird aber aufgerufen... Ich dacht, bei free wird automatisch der Destructor aufgerufen.

Hi,

liegt vllt. daran, dass der Konstruktur vorher nicht als virtual deklariert wurde (in TObject) :gruebel:

mfG
mirage228

Jelly 23. Dez 2004 16:10

Re: Inherited destroy Problem
 
Ja, kann sein. Den constructor kann ich auch nicht überschreiben, da der wohl in TObject nicht als virtual deklariert ist. Ich denk, jetzt ists mir klar geworden... Dank dir.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz