我有一个关于如何在初始化列表中捕获异常的问题。
例如,我们有一个派生自Bar
的Foo类class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
答案 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
替换麻烦的实例。然后,您可以将其初始化推迟到构造函数的主体中。