在构造函数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条评论
登录后参与评论

相关文章

来自分类Dev

在C#中替换try ... catch块

来自分类Dev

try / catch块中未处理的异常

来自分类Dev

异常处理Try Catch块

来自分类Dev

C#-不要打破try catch块

来自分类Dev

C#中try catch块的最大长度是多少

来自分类Dev

我如何在C ++中的catch块中处理异常

来自分类Dev

异步函数中有多个try-catch块

来自分类Dev

如何返回try-catch C#的try块中的下一条语句

来自分类Dev

声明try catch块

来自分类Dev

遍历try / catch块?

来自分类Dev

Java Try Catch块

来自分类Dev

在Catch块中再次重用Try-Catch块

来自分类Dev

C ++ try-catch块未捕获硬件异常

来自分类Dev

通过 Try-Catch 块 C# 进行验证

来自分类Dev

如何在异步函数内的try / catch块中引发错误?

来自分类Dev

将C ++类方法包装在具有附加功能的try catch块中

来自分类Dev

使用try-catch块从文件中读取行以获取异常C ++

来自分类Dev

在 Promise .catch 块中传递给函数的是什么?

来自分类Dev

UnhandledPromiseRejectionWarning:错误抛出到没有catch块的异步函数内部,promise无法通过.catch()处理

来自分类Dev

关于RAII,C ++`try` /`catch`块是否与其他块相同?

来自分类Dev

在try / catch块Java中返回语句

来自分类Dev

catch / try块不在Ruby中运行

来自分类Dev

异常未捕获在try catch块中

来自分类Dev

在Java中try-catch-finally块

来自分类Dev

在try / catch块中引发的异常(Java)

来自分类Dev

在嵌套的try catch块中返回结果

来自分类Dev

在 try/catch 块中未捕获异常

来自分类Dev

尽管执行捕获在catch块中,导致try / catch块未能进行异常处理的原因是什么?

来自分类Dev

C#-返回后在catch块中抛出异常