AGB  ·  Datenschutz  ·  Impressum  







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

Destruktor ueberschreiben - Warnung

Ein Thema von alcaeus · begonnen am 18. Apr 2005 · letzter Beitrag vom 18. Apr 2005
 
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#12

Re: Destruktor ueberschreiben - Warnung

  Alt 18. Apr 2005, 18:20
Ein Destruktor darf grundsätzlich keine Parameter haben!!
(mit Ausnahme des versteckten Self-Parameters)
Dies gilt nicht nur für Delphi sondern auch für andere Programmiersprachen wie C++ u.s.w.
Bei Delphi ist der Destruktor von Anfang an virtuell und das ist auch gut so.

Wenn ein Objekt zerstört werden soll, gibt es nur 2 Informationen:
* das Objekt (bzw. der Zeiger auf das Objekt)
* es soll zerstört werden und alle verwendete Resourcen (insb. Speicher) freigegeben werden
Du diesem Zeitpunkt ist sehr häufig nicht einmal die genaue Klasse bekannt.
Vereinfacht ist die Aufrufereihenfolge so:
TObject.Free -> TEdit.Destroy -> TWinControl.Destroy -> TControl.Destroy -> TPersistent.Destroy -> TObject->Destroy

Die Methode Free ruft intern Destroy auf:
Delphi-Quellcode:
procedure TObject.Free;
asm
        TEST EAX,EAX
        JE @@exit
        MOV ECX,[EAX]
        MOV DL,1
        CALL dword ptr [ECX].vmtDestroy
@@exit:
end;
// und jetzt mal übersetzt nach Pascal
procedure TObject.Free;
  if Assigned(self) then
     self.Destroy;
end;
Man sieht also, dass Destroy nur dann aufgerufen wird, wenn Self auf ein Objekt verweist.
Die Methode Free ist nicht virtuell und darf auch niemals verändert oder überschrieben werden !

weitere Info's:
http://www.dsdt.info/insider/sprache/destruktor.php
Andreas
  Mit Zitat antworten Zitat
 


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 02:09 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 by Thomas Breitkreuz