【发布时间】:2015-03-19 15:55:00
【问题描述】:
我面临的情况是我需要在构造函数中使用 try-catch 块。特别是,构造函数尝试调用 try 块中的函数,如果失败,它将调用另一个函数来设置一些值。在这两种情况下,构造函数都应该正确地创建对象,并且在这两种情况下,它都必须在结束之前调用其他一些方法。情况如下:
class A{
A(int i){
try{
setDevice(i);
}
catch(DeviceException& ex){
setDevice (0);
throw ex;
}
otherMethod();
}
}
但是,如果在 try 块中发生错误,则不会调用 otherMethod(),因为执行在 catch 块内结束,我不能像在其他语言中那样使用 finally 来执行此操作。
此外,我什至不确定,当 try 块内引发异常时,是否会自动调用析构函数,从而导致对象未正确创建。
在这种情况下你有什么建议?即使到达 catch 块,对象是否正确创建?
【问题讨论】:
-
如果你想在任何情况下都有一个正确构造的实例,请省略
throw ex;。
标签: c++ exception constructor try-catch