AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Destroy wird nach free nicht aufgerufen

Ein Thema von ATS3788 · begonnen am 27. Mär 2013 · letzter Beitrag vom 30. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

Destroy wird nach free nicht aufgerufen

  Alt 27. Mär 2013, 17:46
Delphi-Version: XE
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
Martin MIchael
  Mit Zitat antworten Zitat
flipdascript

Registriert seit: 20. Mai 2008
25 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Destroy wird nach free nicht aufgerufen

  Alt 27. Mär 2013, 17:50
Der Destructor ist bereits in der Basisklasse TObject als virtual markiert.

Probiers mal mit
Code:
destructor Destroy; override.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Destroy wird nach free nicht aufgerufen

  Alt 27. Mär 2013, 19:52
Der Destructor ist bereits in der Basisklasse TObject als virtual markiert.
Ich möchte wetten, deswegen hat der Compiler hierbei
destructor Destroy; virtual;
auch eine Warnung produziert.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#4

AW: Destroy wird nach free nicht aufgerufen

  Alt 28. Mär 2013, 07:19
Hallo

destructor Destroy; override; Habe ich doch schon geschrieben das ich das so gemacht habe

TCustomAusgabeFrx = class Habe das so abegeleitet, OHNE

virtual; mekert der Compiler.
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Destroy wird nach free nicht aufgerufen

  Alt 28. Mär 2013, 07:35
@ATS3788

Kann es sein, dass uns da ein paar (entscheidene) Infos fehlen?
Welche anderen Destruktoren?
Von welcher Klasse wird abgeleitet?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#6

AW: Destroy wird nach free nicht aufgerufen

  Alt 28. Mär 2013, 09:39
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;
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#7

AW: Destroy wird nach free nicht aufgerufen

  Alt 29. Mär 2013, 09:42
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
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Destroy wird nach free nicht aufgerufen

  Alt 29. Mär 2013, 09:54
Du sprichst von
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 TObject abgeleitet und damit erbt jede Klasse den destructor von TObject (was auch zwingend ist).

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

Kennzeichne ich den destructor als 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
destructor Destroy; override;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Destroy wird nach free nicht aufgerufen

  Alt 29. Mär 2013, 10:32
Ich habe eine Mutter Object ohne Basic Klasse.

TCustomAusgabeFrx = class
In dem Fall wird implizit immer class(TObject) verwendet. Insofern gibt es keine Klasse ohne Basisklasse außer TObject.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#10

AW: Destroy wird nach free nicht aufgerufen

  Alt 30. Mär 2013, 11:00
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.
Martin MIchael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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