我有一个关于如何在初始化列表中捕获异常的问题。
例如,我们有一个从 Bar 派生的类 Foo
class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
我有一个关于如何在初始化列表中捕获异常的问题。
例如,我们有一个从 Bar 派生的类 Foo
class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
我认为语法是这样的(尽管最好在调用者中捕获这样的东西。一旦你抓住它你会做什么?)
Bar::Bar()
try
: Foo(1)
{
}
catch( const SomeException &e )
{
}
C++ 有这样做的机制,但很少使用。它是函数 try 块:
Bar::Bar()
try
: Foo(1)
{
}
catch( Something )
{
}
请参阅这个经典的 gotw,它概述了为什么它应该只用于翻译异常(例如,异常类型 FooException 变为 BarException)。
我相信这应该被创建对象的过程所捕获。
考虑用boost::optional
. 然后您可以将其初始化推迟到构造函数的主体中。