Я думаю, что синтаксис похож на этот (хотя лучше улавливать такие вещи в вызывающем. И что вы собираетесь делать, когда поймаете это?)
Bar::Bar()
try
: Foo(1)
{
}
catch( const SomeException &e )
{
}
В C ++ есть механизм для этого, но он используется редко. Это функциональный блок try:
Bar::Bar()
try
: Foo(1)
{
}
catch( Something )
{
}
См. Этот классический gotw , в котором объясняется, почему его следует использовать только для преобразования исключений (например, тип исключения FooException становится BarException).
Я считаю, что это должно быть уловлено процедурой, создающей объект.
Рассмотрите возможность замены проблемного экземпляра на boost :: optional
. Затем вы можете отложить его инициализацию в теле конструктора.