如何在初始化列表中捕获异常?

时间:2010-03-14 02:44:59

标签: c++ initialization-list

我有一个关于如何在初始化列表中捕获异常的问题。

例如,我们有一个派生自Bar

的Foo类
class Foo {

public:
Foo(int i) {throw 0; }

}

class Bar : public Foo{

public:

Bar() : Foo(1) {}

}

4 个答案:

答案 0 :(得分:10)

我认为语法类似于this(尽管在调用者中捕获这些内容会更好。一旦你发现它会怎么做?)

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

答案 1 :(得分:6)

C ++有这样做的机制,但它很少使用。它是函数try块:

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

请参阅此经典gotw,其中概述了为什么它只应用于转换异常(例如,异常类型FooException变为BarException)。

答案 2 :(得分:1)

我相信这应该由创建对象的过程捕获。

答案 3 :(得分:0)

考虑用boost::optional替换麻烦的实例。然后,您可以将其初始化推迟到构造函数的主体中。