在构造函数C ++中处理Try-catch块

gcswoosh

我面临的情况是我需要在构造函数中使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章