AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Exception in Create-Prozedur ohne anschließendes Destroy?
Thema durchsuchen
Ansicht
Themen-Optionen

Exception in Create-Prozedur ohne anschließendes Destroy?

Ein Thema von robvs · begonnen am 6. Feb 2007 · letzter Beitrag vom 21. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
robvs

Registriert seit: 3. Jul 2006
30 Beiträge
 
#1

Exception in Create-Prozedur ohne anschließendes Destroy?

  Alt 6. Feb 2007, 14:25
Hallo,

ich habe eine Klasse, die bereits im Constructor diverse Zustände abprüft und ggf ein Exception wirft, um eine Behandlung ungewollter Zustände zu ermöglichen. Mein Problem dabei ist, dass leider nach dem Erzeugen der Exception innerhalb des Constructors die Objektinstanz vollautomatisch freigegeben wird, es wird also unmittelbar der Destructor aufgerufen.

Kann man das irgendwie verhindern??

VG

Rob

PS: Ich nutze das BDS2006
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 14:36
Das ist IMHO nicht möglich.
Aber man kann die Routinen evtll. in die Methode AfterConstruction verlagern.
Diese Methode sollte in allen Klassen vorhandensein und kann überschrieben werden.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
robvs

Registriert seit: 3. Jul 2006
30 Beiträge
 
#3

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 14:48
Hey Frank und alle anderen,

das habe ich ebenfalls probiert - leider führt auch eine dort ausgelöste Exception zum Aufruf des Destructors.
Kann es sein, dass das mal eine ganz empfindliche Schwachstelle im exception handling von Delphi ist?
Ich brauch doch trotz mangelhafter Zustände, auf die ja mit Hilfe von Exceptions aufmerksam gemacht wird, die Möglichkeit in der übergeordneten Instanz, die ja spezifische Lösungskonzepte hat, die Zustände nach übergeordneter Logik zu handeln.

Ich kenne andere Konzepte für sowas, aber wenn es doch die Möglichkeit von Haus aus gibt, wieso klappt die nicht stringent? Das will ich einfach nicht glauben Da gibt es doch bestimmt etwas?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 14:51
Zitat von robvs:
das habe ich ebenfalls probiert - leider führt auch eine dort ausgelöste Exception zum Aufruf des Destructors.
Kann es sein, dass das mal eine ganz empfindliche Schwachstelle im exception handling von Delphi ist?
Finde ich nicht. Ich finde deinen Ansatz sehr komisch.
Was wäre wohl wenn z.B. du im Konstruktor eine sehr wichtige Systemresource anforderst aber nicht bekommst. Was willst du dann mit einer solch Halb-Erzeugten Instanz machen? Da ist schon besser das bei einer Exeption im Konstruktor du keinen Zeiger auf dieses Objekt bekommst und es auch wieder aufgeräumt wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
robvs

Registriert seit: 3. Jul 2006
30 Beiträge
 
#5

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 14:56
Wenn ich so eine Ressource belegte, kümmere ich mich doch auch darum. Aber das ist bei mir ja gar nicht der Fall!
Also meiner Meinung nach ist das eine "Anmaßung von Entscheidungskompetenz" seitens Delphi.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 15:03
Nö. Wie willst du dich darum kümmern, wenn Methoden der Elternklasse im Konstruktor aufgerufen werden und dort eine Exception auftritt? Im gegenteil, wenn was im Konstruktor schief geht, nimmt dir Delphi alles weitere ab. Und was würdest du denn machen, wenn du im Konstrukor eine Exception bekommst und die Klasse nicht korrekt instanziert werden kann? Die Objektinstanz ist wertlos und muss wieder freigegeben werden. Und genau das macht Delphi.

Was sollte denn Delphi deiner Meinung nach machen? Dir ein kaputtes Objekt liefern, mit dem du nichts anfangen kannst? Und sowieso selber sofort wieder freigeben würdest? Und da taucht schon die nächste Frage auf: Woher weißt, du dass du nur ein kaputtes Objekt zurückbekommen hast? Die Variable ist nicht nil, aber die Klasse wurde nicht vollständig oder fehlerhaft instanziert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 15:04
Moin Rob,

dann solltest Du im Konstruktor keine Exception werfen, sondern ein Flag setzen, dass Du dann als Eigenschaft veröffentlichst, in dem der Zustand der Instanz hinterlegt wird.
Dann kannst Du nach dem TMeineKlasse.Create abfragen, ob noch etwas getan werden muss oder nicht.

Zitat von robvs:
Also meiner Meinung nach ist das eine "Anmaßung von Entscheidungskompetenz" seitens Delphi.
das kann ich nicht nachvollziehen.
Wenn das Erzeugen der Instanz fehlschlägt (Exception) existiert, normalerweise, auch keine Instanz, mit der man arbeiten könnte, also ist es nur konsequent dass aufgeräumt wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
robvs

Registriert seit: 3. Jul 2006
30 Beiträge
 
#8

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 15:48
Zuerst danke für Eure Beiträge.

Generell gehe ich da auch konform, nur in diesem Fall habe ich ein Objekt, das ich zwingend brauche, welches aber auch diverese andere Objekte direkt im Konstruktor miterzeugt. Diese können Exceptions hervorrufen und wären dann auch so weit entbehrlich, jedoch nicht mein Hauptobjekt, das weiter existieren soll. Nur wenn eine Exception in einem untergeordneten Objekt auftritt, wird auch letztendlich auch der Destruktor des Hauptobjekts aufgerufen und genau da liegt mein Problem.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 16:21
Ist doch kein Problem. Einfach den gefährlichen Teil in einem try...except kapseln und damit die Exeption selbst behandeln.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
robvs

Registriert seit: 3. Jul 2006
30 Beiträge
 
#10

Re: Exception in Create-Prozedur ohne anschließendes Destroy

  Alt 6. Feb 2007, 16:25
Mache ich ja, aber erst in den spezifischen Modulen, die mein "Hauptobjekt" erzeugen.
  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 10:40 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