AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials [Tutorial] Den Destruktor verstehen
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Tutorial] Den Destruktor verstehen

Ein Tutorial von sx2008 · begonnen am 15. Apr 2012 · letzter Beitrag vom 20. Apr 2012
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#2

AW: [Tutorial] Den Destruktor verstehen

  Alt 15. Apr 2012, 06:13
Zitat:
// schlechter Stil: unnötiger Code und unnötiger Eintrag in der VMT
Fast richtig.
- ja, es ist unnötiger Code
- nein, es ist kein unnötiger Eintrag in der VMT

Denn die VMT gibt es so oder so.
- hat man was überschrieben, dann steht die eigene Methode drin
- wurde es nicht überschrieben, dann steht darin die letzte Methode des Vorfahren

Und das Destroy immer public sein muß, stimmt auch nicht.
Da diese Methode über die VMT und nicht über die RTTI gesucht wird, kann sie als alles deklariert überschrieben sein, da Free bei Freigabe über TObject und dessen Sichtbarkeiten geht.
Nur daß Nachfahren es schwer hätten das zu überschreiben, wenn es private ist.
Ich persönlich hätte dieses Destroy als Protected deklariert, was zu weniger Problemen geführt hätte. (kann muß Free aufrufen, da Destroy nicht von außen erreichbar ist)

Zitat:
Borland wollte offensichtlich dem Programmierer die Möglichkeit geben, den Destruktor direkt aufzurufen.
Ich hab eher das Gefühl man hat garnicht nachgedacht.
In der Deklaration von TObject findet man garnichts von Sichtbarkeiten ... das hatte man wohl einfach vergessen.
Das ist zumindestens in älteren Delphis so, was man inzwischen (D2010) geändert hat, aber vermutlich aus Gründen der Abwärtskompatibilität hat man lediglich das Public eingebaut und nicht gleich mal Einiges nach Protected verschoben.
Wobei ich diese angebliche Abwärtskomatibilität, wie gesagt, eh sinnlos finde, da es im Notfall dennoch sichtbar gemacht werden könnte, dort wo es wirklich unbedingt nötig währe.

Oftmals sind auch Methoden als Published deklariert, obwohl sie eigentlich nur als Public gedacht waren,
denn meistens wird zu Anfang garkeine Sichtbarkeit angegeben, da kommt ohne Angabe gleich die erste Methode in der Deklaration.
Und bei TPersistent-Nachfahren wurde die Standardsichtbarkeit von Public auf Published geändert wurde, womit diese Methoden dann automatisch Published sind.
Oder Schlimmer, vieles ist Private, was besser Protected gewesen währe.

Zitat:
Warum braucht man überhaupt das inherited im Destruktor? Könnte Delphi das nicht automatisch aufrufen?
Gute Frage! In anderen Programmiersprachen (z.B. C++, C#) ist es tatsächlich so,
dass automatisch die ererbten Destruktoren aufgerufen werden, ohne dass sich der Programmierer darum kümmern müsste.
Und was währe, wenn ich was überschreiben will, ohne daß die Vorfahrmethoden ausgeführt werden?
Und außerdem kann man über das Inherited entscheiden wann der Vorfahr ausgeführt wird. (zu Anfang, zwischendrin, am Ende oder garnicht)




Jetzt fehlt nur noch der Constructor.

Auch der Class Constructor und Class Destructor währen eine Erwähnung wert.
Das sind die neuen Initialization und Finalization, aber ohne gewisse Nachteile, welche viele kennen und weswegen oftmals bei NonVCL Units wie SysUtils weggelassen werden. (Dateigröße)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Apr 2012 um 06:34 Uhr)
  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 16:25 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