我面临的情况是我需要在构造函数中使用try-catch块。特别是,构造函数尝试在try块中调用一个函数,如果失败,它将调用另一个函数来设置一些值。在这两种情况下,构造函数都应正确创建对象,并且在两种情况下,构造函数都必须在结束之前调用其他方法。情况如下:
class A{
A(int i){
try{
setDevice(i);
}
catch(DeviceException& ex){
setDevice (0);
throw ex;
}
otherMethod();
}
}
但是,如果在try块中发生错误,otherMethod()
则不会调用它,因为执行在catch块内结束,而我最终不能像其他语言那样使用它。此外,我什至不确定在try块内引发异常时是否自动调用析构函数,从而导致对象创建不正确。
在这种情况下,您有何建议?即使到达catch块,对象是否也正确创建?
如果已经处理过异常,请勿将其抛出。删除throw ex;
执行catch
块并正常完成构造函数。
如果异常离开了构造函数,则该对象被视为尚未初始化。析构函数不会被调用;但是用于任何成员和基础子对象的对象将被释放,并且为该对象分配的内存将被释放。
(如果您确实想重新抛出,那只是throw;
为了避免制作异常对象的新副本。但是您也不希望在这里这样做。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句