Exceptions im Konstuktor
-
Hallo zusammen,
ich hab nur eine kurze Frage:
Kann ich in Konstruktoren Exceptions werfen ohne Datenmüll
oder andere Seiteneffekte zu erhalten?Gruß,
CSpille
-
wenn der konstruktor was taugt, ist das gar kein problem.
schlecht:Foo:Foo(){ data=new char[10]; if(...) throw 17; data[0]=0; }über ne gute lösung kannste 10 forenmitglieder fragen und kriegst 12 meinungen. die meisten werden smart-pointers vorschlagen. besonders pfiffige werden sagen, daß eine klasse nur einen zweck erfüllen sollte und täten deine das, wäre das problem weg.
-
Regel: Nur in Dtoren und Exception-Unsicheren Code sollte man keine Exceptions werfen. Letzteres zu entdecken ist die schwierigere Aufgabe

@volkard
::
-
Man sollte hinzufügen: Falls beim Aufruf von new Foo() der Konstruktor eine Exception wirft, wird das Objekt automatisch deallokiert. Andernfalls wäre es fatal, weil man kaum eine Chance hat, einen Zeiger darauf zu bekommen um es von Hand zu deallokieren.
-
Hallo kingruedi,
Was ist denn Exception-Unsicherer Code?
Wann wird denn Code exception-unsicher?
Nenn mir mal bitte ein Beispiel.Quarz
-
Member eines Objektes, die schon erzeugt wurden, bevor die Exception ausgelöst wurde, werden selbstverständlich auch wieder zerstört (Destruktoraufruf). Wobei der Destruktor der Klasse selbst nicht gerufen wird. (Sollte man für ein Objekt, dessen Konstruktion fehlgeschlagen ist, den Destruktor aufrufen? :xmas2: ) Reserviert man neuen Speicher, sollte natürlich immer eine Institution da sein, die sich dem Besitz des Speichers annimmt (z.B. Smartpointer).
@Quarz: Lies doch mal das hier:
http://www.gotw.ca/gotw/059.htm
http://www.gotw.ca/gotw/060.htm
http://www.gotw.ca/gotw/008.htm