コンストラクターが例外をスローする可能性のあるクラスがあります。
class A {
A() { /* throw exception under certain circumstances */ }
};
スタックに割り当てられたインスタンスのクライアントでこの例外をキャッチしたいと思います。try
しかし、少なくともインスタンスが生きている必要がある限り、ブロックを拡張することを余儀なくされています。
try {
A a;
do_something(a);
} catch {
// ...
}
これは、tryブロックが大きすぎて例外の原因を追跡できない場合に、明らかに問題になります。
try {
A a1;
A a2;
do_something(a1, a2);
} catch {
// Who caused the exception?
}
この状況を回避するにはどうすればよいですか?
更新:
問題をうまく説明していなかったようです。明らかな理由から、tryブロックを必要なだけ少ないコード(つまり、構造のみ)にまたがらせたいと思います。
しかし、それは、オブジェクトがスコープ外に移動したために、後でオブジェクトを使用できないという問題を引き起こします。
try {
A a1;
} catch {
// handle a1 constructor exception
}
try {
A a2;
} catch {
// handle a2 constructor exception
}
// not possible
do_something(a1, a2);