![]() |
Delphi-Version: XE
Destroy wird nach free nicht aufgerufen
Hallo
![]() habe ich mir reingezogen. Danke klar und verständlich
Delphi-Quellcode:
Ein Teil des Custom Objectstype TCustomAusgabeFrx = class private _frxReport : TfrxReport; _frxReportPage : TfrxReportPage; public constructor Create; destructor Destroy; virtual; 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 |
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.
|
AW: Destroy wird nach free nicht aufgerufen
Zitat:
Zitat:
|
AW: Destroy wird nach free nicht aufgerufen
Hallo
Delphi-Quellcode:
Habe ich doch schon geschrieben das ich das so gemacht habe
destructor Destroy; override;
Delphi-Quellcode:
Habe das so abegeleitet, OHNE
TCustomAusgabeFrx = class
Delphi-Quellcode:
mekert der Compiler.
virtual;
|
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? |
AW: Destroy wird nach free nicht aufgerufen
Zitat:
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; |
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 |
AW: Destroy wird nach free nicht aufgerufen
Du sprichst von
Zitat:
Jede Klasse wird von
Delphi-Quellcode:
abgeleitet und damit erbt jede Klasse den destructor von
TObject
Delphi-Quellcode:
(was auch zwingend ist).
TObject
Und diesen destructor muss ich überschreiben (
Delphi-Quellcode:
), wenn meine Klasse dort etwas besonderes ausführen soll.
override
Kennzeichne ich den destructor als
Delphi-Quellcode:
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.
virtual
Somit sieht ein destructor immer so aus
Delphi-Quellcode:
destructor Destroy; override;
|
AW: Destroy wird nach free nicht aufgerufen
Zitat:
Delphi-Quellcode:
verwendet. Insofern gibt es keine Klasse ohne Basisklasse außer TObject.
class(TObject)
|
AW: Destroy wird nach free nicht aufgerufen
Danke Danke
Ich muss Destroy gleich mit override überschreiben. Schon im Custom Object.
Delphi-Quellcode:
der Teil hatte mich verwirrt gehabt.
TObject = class
... public ... destructor Destroy; virtual; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz