This question already has an answer here:
I have a question about how to catch the exception in the initialization list.
For example, we have a class Foo derived from Bar
class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
I think the syntax is like this (even though it's better to catch such things in the caller. And what are you going to do once you caught it?)
Consider replacing the troublesome instance with a
boost::optional
. Then you can defer its initialization into the body of the constructor.C++ has a mechanism for doing so, but it is rarely used. It is the function try block:
See this classic gotw, which outlines why it should only be used to translate exceptions (e.g., exception type FooException becomes BarException).
I believe this should be caught by the procedure creating the object.