Zitat:
Was gibt es da zu behandeln. Wenn im Konstruktor eine
Exception auftritt wird sofort in the Destruktor gesprungen und das Objekt freigegeben. Danach wird die
Exception weitergeleitet so dass der Konstruktor-Aufrufer diese auch mitbekommt. Zugegeben, die Klasse wird erstmal instanziert und dann wieder freigegeben. Aber im Fehlerfall ist die dabei verschwendete Zeit im Vergleich zum Auslösen einer
Exception nicht messbar.
zu behandeln gibts im generellen fall dass das objekt nicht instanziiert ist und man auf unreferenzierten speicher zugreift. Es gibt generell Konstruktoraufrufe wo keine exceptions
passieren müssen und wo man im generellen nicht etwaitige exceptions catchen muss.
Mir geht es hier vielmehr um den stil und um robusten, tranzparenten source.
In diesem vereinfachtem beispiel ja, aus gewohnheit setze ich es jedoch immer auf nil,
damit sowas wie assign beim weiteren verarbeiten greift.
Code:
try
lala:=TCMyClass.Create(toCheck);
except
lala:=nil; { *** Das ist nutzlos, da du auf lala nicht mehr zugreifst und es seinen Sichtbarkeitsbereich verlässt }
exit;
end;
Kritik ist immer erwünscht
Beste grüße
Konse