繁体   English   中英

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

[英]Handling Try-catch block in a constructor C++

我正面临一种情况,我需要在构造函数中使用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; 继续执行catch块并正常完成构造函数。

如果异常离开构造函数,则认为该对象尚未初始化。 析构函数不会被调用; 但是对于任何成员和基础子对象的那些将被释放,并且将释放为该对象分配的内存。

(如果你确实想要重新抛出,那应该只是throw;避免制作异常对象的新副本。但你也不想在这里。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM