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 に答える