我有一个类,其构造函数可能会引发异常。
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);