AGB  ·  Datenschutz  ·  Impressum  







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

Warum virtuelle Destructoren?

Ein Thema von Muetze1 · begonnen am 18. Feb 2007 · letzter Beitrag vom 20. Feb 2007
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#11

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 00:54
Zitat von Hansa:
Ja, was soll denn überschrieben werden ? Da ist doch nichts vorher.
Ich weiss ja nicht, wie's bei dir aussieht, aber mein TObject hat sowas drinstehn:
destructor Destroy; virtual;

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 01:04
Jason, ich meine das hier :

Delphi-Quellcode:
type
  TFIFO = class
        destructor Destroy; override;
      end;
Delphi wird das schon schlucken. Nur, was soll das ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#13

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 01:15
Zitat von Hansa:
Nur, was soll das ?
So wies aussieht soll das den virtuellen Destruktor ueberschreiben.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 01:25
Dann zeige mal wo der sein soll. Mittlerweile auch gemerkt, dass da was nicht stimmt ? Oder, was habe ich in Object-Pascal wann verpasst ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#15

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 01:31
In TObject?
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#16

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 01:31
Zitat von Hansa:
Dann zeige mal wo der sein soll.
Spielen wir grad blinde Kuh?
Hier hab ichs schon mal geschrieben: TObject enthaelt einen virtuellen Destruktor:
Delphi-Quellcode:
Type
  TObject = Class
  Public
    destructor destroy;virtual;
greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#17

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 01:46
Blinde Kuh ? Ja wär doch gut.

Nächster Versuch :

Delphi-Quellcode:
type
  TFIFO = class
  private
    Type
      TNode = class
      private
        FNext: TNode;
        FObject: TObject;

      public
        constructor Create(AObject: TObject);
        destructor Destroy; override;
      end;
Erkläre mir mal bitte, warum da ein Destructor einer leeren Class TFIFO (also ohne Vorfahr) per override überschrieben werden muss. Mehr will ich gar nicht wissen. Wer soll mit dem "override" denn überhaupt angesprochen werden ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#18

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 01:49
Zitat von Hansa:
Erkläre mir mal bitte, warum da ein Destructor einer leeren Class TFIFO (also ohne Vorfahr) per override überschrieben werden muss. Mehr will ich gar nicht wissen. Wer soll mit dem "override" denn überhaupt angesprochen werden ?
Wenn nicht anders angegeben, wird jede Klasse von TObject abgeleitet und erbt damit all ihre Methoden. Inklusive dem virtuellen Destruktor, der dann ueberschrieben wird.

gute Nacht
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 02:30
Ich hänge dazu nochmal schnell die Meinung der OH an, welches dies auch ausdrücklich beschreibt:
Zitat von oh:
Wenn Sie in der Deklaration eines Klassentyps keinen Vorfahren angegeben, erbt die Klasse direkt von TObject. Aus diesem Grund ist die Deklaration

Delphi-Quellcode:
TMyClass = class
 ...
end;
identisch mit

Delphi-Quellcode:
type TMyClass = class(TObject)
 ...
end;
Die zweite Variante verdient jedoch aus Gründen der Lesbarkeit den Vorzug.
@Hansa: Bei C++ bzw. speziell dem BCB wäre es wichtig bzw. ein Unterschied für die VCL Klassen bzw. C++ Klassen. Diese können auch nicht vermischt werden, aber in Delphi gibt es immer nur die VCL Klassen, und die erben grundsätzlich von TObject, wenn nicht explizit anders angegeben.

/EDIT: Wenn du das Override nicht angibst, dann erhälst du zum einen einen Hinweis/Warnung vom Compiler und zum anderen wird dein Destructor nie ausgeführt.
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: unsichtbare Klassen

  Alt 19. Feb 2007, 09:09
Zitat von Muetze1:
/EDIT: Wenn du das Override nicht angibst, dann erhälst du zum einen einen Hinweis/Warnung vom Compiler und zum anderen wird dein Destructor nie ausgeführt.
Das bedarf aber noch ein paar Erklärungen.

Er wird nur dann nicht ausgeführt, wenn zum Freigeben von TMeinObjekt ein MeinObjekt.Free benutzt wird. Free ist von TObject geerbt und ruft eben nur den Destruktor destroy von TObject auf, wenn dessen Virtualität nicht Rechnung getragen wird in den abgeleiteten Klassen. Durch ein override würde MeinObjekt.Free den Destructor destroy von TMeinObjekt aufrufen. Daher sollten Destruktoren in der Regel immer ihren Ahnen per override überschreiben. Eben weil sonst ein Free den eigenen Destruktor nicht "erreichen" würde, sondern in TObject "hängenbleiben" würde.

Nun kann man aber locker auch den Destruktor direkt aufrufen, um ein TMeinObjekt freizugeben: MeinObjekt.Destroy.
In diesem Fall würde der Destruktor von TMeinObjekt immer aufgerufen werden, ohne jegliche Relevanz dessen, ob er seinen Ahnen in TObject überschreibt oder nicht.
Allerdings ist diese Art des Destruktoren-Aufrufs nicht sooo sonderlich empfehlenswert, weil zuvor überprüft werden muss, ob MeinObjekt nicht schon nil ist. Nichts anderes macht nämlich TObject.Free.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 04:10 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