AGB  ·  Datenschutz  ·  Impressum  







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

Interessantes Destruktor Problem

Ein Thema von sx2008 · begonnen am 7. Jan 2011 · letzter Beitrag vom 7. Jan 2011
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Interessantes Destruktor Problem

  Alt 7. Jan 2011, 08:56
Ich behaupte also man darf so wie oben nicht programmieren
Ich behaupte das Gegenteil!
Naja trotzdem sollte man so nicht programmieren. Nach dem inherited wurden alle Objekte der Basisklasse(n) schon freigegeben (davon ausgegangen, dass die Basisklassen sauber programmiert wurden). Da kann man böse auf die Nase fallen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Interessantes Destruktor Problem

  Alt 7. Jan 2011, 09:09
Naja trotzdem sollte man so nicht programmieren. Nach dem inherited wurden alle Objekte der Basisklasse(n) schon freigegeben (davon ausgegangen, dass die Basisklassen sauber programmiert wurden). Da kann man böse auf die Nase fallen.
Natürlich muss man wissen, was man tut - das gilt immer und überall beim Programmieren. Es kann ja durchaus sein, daß im inherited eine virtuelle Methode aufgerufen wird, die in einer abgeleiteten Version auf einige der Instanz-Felder zugreift. Dann müssen diese Felder während des inherited Destroy noch gültig sein. TList ruft z.B. im Destroy ein Clear auf, das in einer abgeleiteten Klasse überschrieben sein kann und auf irgendwelche Felder in dieser abgeleiteten Klasse zugreift. (Interessanterweise ruft TList.Destroy gar kein inherited auf!)

Die Aussage "man sollte so nicht programmieren" kann ich also in keiner Weise nachvollziehen.

Nur ein paar Beispiele aus Classes.pas:

Delphi-Quellcode:
destructor TRegGroup.Destroy;
destructor TThreadList.Destroy;
destructor TStringList.Destroy;
destructor TThread.Destroy;
destructor TBasicAction.Destroy;
destructor TDataModule.Destroy;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Interessantes Destruktor Problem

  Alt 7. Jan 2011, 09:16
Natürlich muss man wissen, was man tut
...
Die Aussage "man sollte so nicht programmieren" kann ich also in keiner Weise nachvollziehen.
Da haben wir den Knackpunkt. Wenn man zB im Team arbeitet, kann es sein das andere es nicht wissen was derjenige da getan hat, übernimmt aber das inherited immer am Anfang.

Die Frage ist nicht warum man so etwas nicht tun sollte.
Die Frage ist: Gibt es irgend einen Grund warum man sowas machen sollte?
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:16 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