Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Destroy wird nach free nicht aufgerufen (https://www.delphipraxis.net/173999-destroy-wird-nach-free-nicht-aufgerufen.html)

ATS3788 27. Mär 2013 16:46

Delphi-Version: XE

Destroy wird nach free nicht aufgerufen
 
Hallo

http://www.delphipraxis.net/167726-%...verstehen.html

habe ich mir reingezogen.

Danke klar und verständlich

Delphi-Quellcode:

type
TCustomAusgabeFrx = class
private
_frxReport            : TfrxReport;
_frxReportPage        : TfrxReportPage;

public
constructor Create;

destructor  Destroy; virtual;
Ein Teil des Custom Objects
die anderen descructor`s mit override überschrieben
wenn ich destroy aufrufe kein Problem, mit free
wird destroy nicht aufgerufen

Was könnte ich übersehen haben

flipdascript 27. Mär 2013 16:50

AW: Destroy wird nach free nicht aufgerufen
 
Der Destructor ist bereits in der Basisklasse TObject als virtual markiert.

Probiers mal mit
Code:
destructor Destroy; override.

uligerhardt 27. Mär 2013 18:52

AW: Destroy wird nach free nicht aufgerufen
 
Zitat:

Zitat von flipdascript (Beitrag 1209133)
Der Destructor ist bereits in der Basisklasse TObject als virtual markiert.

Ich möchte wetten, deswegen hat der Compiler hierbei
Zitat:

Zitat von ATS3788 (Beitrag 1209132)
Delphi-Quellcode:
destructor  Destroy; virtual;

auch eine Warnung produziert.

ATS3788 28. Mär 2013 06:19

AW: Destroy wird nach free nicht aufgerufen
 
Hallo

Delphi-Quellcode:
destructor  Destroy; override;
Habe ich doch schon geschrieben das ich das so gemacht habe

Delphi-Quellcode:
TCustomAusgabeFrx = class
Habe das so abegeleitet, OHNE

Delphi-Quellcode:
virtual;
mekert der Compiler.

Sir Rufo 28. Mär 2013 06:35

AW: Destroy wird nach free nicht aufgerufen
 
@ATS3788

Kann es sein, dass uns da ein paar (entscheidene) Infos fehlen?
Welche anderen Destruktoren?
Von welcher Klasse wird abgeleitet?

Blup 28. Mär 2013 08:39

AW: Destroy wird nach free nicht aufgerufen
 
Zitat:

Zitat von ATS3788 (Beitrag 1209132)
Delphi-Quellcode:
{...}
destructor  Destroy; virtual;
Ein Teil des Custom Objects
die anderen descructor`s mit override überschrieben
wenn ich destroy aufrufe kein Problem, mit free
wird destroy nicht aufgerufen

Was könnte ich übersehen haben

Jede Klasse hat eine Liste der virtuellen Methoden.
Für abgeleitete Klassen wird eine Kopie dieser Tabelle erstellt und Einträge überschrieben (override) oder neue hinzufügen (virtual).

Mit "Destroy; virtual;" gibt es dann zwei Einträge für Destroy in deiner Klasse.
Free kennt nur den Index des orginalen Destroy in der Tabelle, den schon die Klasse TObject deklariert.
Deshalb immer override für Destroy:
Delphi-Quellcode:
{...}
destructor  Destroy; override;

ATS3788 29. Mär 2013 08:42

AW: Destroy wird nach free nicht aufgerufen
 
Sir Rufo

ich verstehe nicht

Ich habe eine Mutter Object ohne Basic Klasse.

TCustomAusgabeFrx = class

geht das nicht ?

Wo könnte mein Denkfehler liegen

Frohe Oster allen Delphianern

Sir Rufo 29. Mär 2013 08:54

AW: Destroy wird nach free nicht aufgerufen
 
Du sprichst von
Zitat:

Zitat von ATS3788 (Beitrag 1209132)
Ein Teil des Custom Objects
die anderen descructor`s mit override überschrieben

und das ist Plural also mehrere -> welche anderen also? ;)

Jede Klasse wird von
Delphi-Quellcode:
TObject
abgeleitet und damit erbt jede Klasse den destructor von
Delphi-Quellcode:
TObject
(was auch zwingend ist).

Und diesen destructor muss ich überschreiben (
Delphi-Quellcode:
override
), wenn meine Klasse dort etwas besonderes ausführen soll.

Kennzeichne ich den destructor als
Delphi-Quellcode:
virtual
dann wird nicht der destructor der Basisklasse überschrieben, was doof ist, denn genau der aus der Basisklasse (TObject) wird aufgerufen und der eigene in diesem Fall nicht.

Somit sieht ein destructor immer so aus
Delphi-Quellcode:
destructor Destroy; override;

Uwe Raabe 29. Mär 2013 09:32

AW: Destroy wird nach free nicht aufgerufen
 
Zitat:

Zitat von ATS3788 (Beitrag 1209308)
Ich habe eine Mutter Object ohne Basic Klasse.

TCustomAusgabeFrx = class

In dem Fall wird implizit immer
Delphi-Quellcode:
class(TObject)
verwendet. Insofern gibt es keine Klasse ohne Basisklasse außer TObject.

ATS3788 30. Mär 2013 10:00

AW: Destroy wird nach free nicht aufgerufen
 
Danke Danke

Ich muss Destroy gleich mit override überschreiben.
Schon im Custom Object.

Delphi-Quellcode:
TObject = class
 ...
public
 ...
   destructor Destroy; virtual;
end;
der Teil hatte mich verwirrt gehabt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 Uhr.
Seite 1 von 2  1 2      

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