2010-03-14 5 views

Antwort

10

Ich denke, die Syntax wie this ist (auch wenn es besser ist, solche Dinge in den Anrufer zu fangen. Und was werden Sie tun, wenn Sie es gefangen?)

Bar::Bar() 
try 
    : Foo(1) 
{ 
} 
catch(const SomeException &e) 
{ 
} 
+5

Whoa, das ist ein seltsamer Code. –

+3

Beachten Sie, dass dies nicht verwendet werden kann, um die Ausnahme zu ignorieren. Wenn der 'catch'-Block keine Ausnahme auslöst, wird die ursprüngliche Ausnahme automatisch erneut ausgelöst (siehe das verknüpfte GOTW für Details). – sth

+0

@sth: Sicher kann es, nur 'zurückkommen. – Potatoswatter

1

Ich glaube, das durch das Verfahren gefangen werden soll, um das Objekt zu schaffen.

6

C++ einen Mechanismus zu tun so, aber es wird selten benutzt. Es ist der Funktion Try-Block:

Bar::Bar() 
try 
    : Foo(1) 
{ 
} 
catch(Something) 
{ 
} 

diese klassischen gotw Siehe, weshalb umreißt es nur verwendet werden, sollte Ausnahmen übersetzen (zum Beispiel Ausnahmetyp FooException wird BarException).

+1

Immer eine Referenz erfassen. – Potatoswatter

0

Überlegen Sie, die problematische Instanz durch eine boost::optional zu ersetzen. Dann können Sie die Initialisierung in den Rumpf des Konstruktors verschieben.