8

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

例如,我们有一个从 Bar 派生的类 Foo

class Foo {

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

}

class Bar : public Foo{

public:

Bar() : Foo(1) {}

}
4

4 回答 4

11

我认为语法是这样(尽管最好在调用者中捕获这样的东西。一旦你抓住它你会做什么?)

Bar::Bar()
try
  : Foo(1)
{
}
catch( const SomeException &e )
{
}
于 2010-03-14T02:52:20.387 回答
6

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

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

请参阅这个经典的 gotw,它概述了为什么它应该只用于翻译异常(例如,异常类型 FooException 变为 BarException)。

于 2010-03-14T02:53:20.727 回答
1

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

于 2010-03-14T02:48:34.280 回答
0

考虑用boost::optional. 然后您可以将其初始化推迟到构造函数的主体中。

于 2010-03-14T04:44:41.883 回答