Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception in Create-Prozedur ohne anschließendes Destroy? (https://www.delphipraxis.net/85885-exception-create-prozedur-ohne-anschliessendes-destroy.html)

Bernhard Geyer 6. Feb 2007 15:41

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

Zitat von robvs
Mache ich ja, aber erst in den spezifischen Modulen, die mein "Hauptobjekt" erzeugen.

Dann sollstest Du deinen Code umstellen und wie Christian angemerkt hat mit Flag arbeiten.

IngoD7 6. Feb 2007 15:45

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

Zitat von robvs
[...] 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.

Wie bereits mehrfach geschrieben: Das ist auch vernünftig so.

Aber ich habe dazu eine Frage:
Erzeugst du im Konstruktor deines "Hauptobjektes" andere, fremde, nicht zum Hauptobjekt gehörende Objekte??? Beispielsweise eine TStringliste, die sich nicht als Feld FMyStringList:TStringlist im Hauptobjekt befindet??? Das wäre doch irgendwie unschön, oder? :gruebel:

Wenn es aber alles Objekte sind, die zu deiner Hauptklasse gehören, also ein Teil ihrer sind, dann sollten die auch nicht unbedingt entbehrlich sein. Oder was verstehe ich falsch?

robvs 6. Feb 2007 16:06

Re: Exception in Create-Prozedur ohne anschließendes Destroy
 
Keine Sorge, die Objekte sind in der Klasse definiert.

Und doch kann es sein, dass es einige der Unterobj nicht gibt, da das eben Fallspezifisch ist. Es sind entbehrliche und optionale Teile, die nur unter gewissen Umständen verfügbar sind oder eben nicht. Und die Exceptions brauche ich, um im implementierenden Programm auf das Nichtvorhandensein im Einzelnen reagieren zu können. Die Zustände, ob ein Objekt existieren darf, überprüft das Objekt aber erst beim Erstellen selber, da diese Funktionalität in den Funtkionsumfang des Unterobjekts gehört.

Ich glaube, ich löse das irgendwie anders :)

Konse 20. Feb 2007 19:57

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

@robvs so eine Art Problem wie du es hast habe ich momentan auch.
In meinen Augen ist es eher ein Designproblem, wie du damit umgehen solltest, falls
eine exception im create constructor aufgerufen wird.

Denke eine Möglichkeit für dich wäre dir eine eigene Funktion keinen Konstruktor zum erstellen
zu basteln, von wo aus du deinen Konstruktor aufrufst.

schau dir einmal folgenden link an:
http://cc.codegear.com/Item/17353

für mich stellt sich eher die frage wie man so eine Exception am besten fängt.
In meinen Augen darf man dafür jedes mal für jedes Objekt (dass im Konstruktor eine Exception werfen kann)
folgendes machen:

Code:
function doSomething(const toCheck:integer):boolean;
var
lala:TCMyClass;// toCheck ist z.b. integer der nur von 5-19 gehen soll ansonsten exception
begin
  result:=false;

   try
      lala:=TCMyClass.Create(toCheck);
   except
      lala:=nil;
      exit;
   end;

   try
      lala.doWork();
   finally
     FreeAndNil(lala);
   end;
end;
Oder gibt es dafür eine elegantere Lösung, wenn man eine Exception im Konstruktor hat?


Gruß, Mario

Konse 21. Feb 2007 20:41

Re: Exception in Create-Prozedur ohne anschließendes Destroy
 
neuen thread zur frage erstellt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 2 von 2     12   

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