处理构造函数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块内部引发异常时,是否自动调用了析构函数,从而导致对象没有正确创建。
在这种情况下你有什么建议?即使到达捕捉块,对象是否正确创建?
如果已经处理了异常,就不要重新抛出它。删除throw ex;
以执行catch
块,并正常完成构造函数。
如果异常离开构造函数,则该对象被视为尚未初始化。析构函数不会被调用;但是,任何成员和基本子对象的内存都将被释放,并且为该对象分配的内存将被释放。
(如果你确实想重新抛出,那应该只是throw;
,以避免生成异常对象的新副本。但这里也不希望这样。)
相关文章:
- 为什么catch中的代码没有被执行
- 编译器是否必须始终删除 try-catch 块(如果它被证明是非抛出的)
- 有没有更好的方法来处理异常? try-catch块真的很丑
- RapidXML 节点在 try catch 块中具有正确的值,但它在块外为 nullptr
- 何时删除 try-catch 块中的指针
- 构造函数中的异常:init() 方法、指针、大型 try/catch 或
- C++ C2509 在讲师的定义中使用 try: - catch
- ex.nested try-catch中的什么()更改
- 在尝试块中的一个语句中是否有例外情况导致控制流程绕过try块中的所有剩余语句
- 在 C++ 和 C# 中使用 try/catch 的正确方法是什么?
- c++中try-catch块的catch中使用了哪些参数
- 在异常处理中,对性能的影响会随着 try 部分中的代码量而增长
- 从catch块调用异常类中的函数并不是打印从try块传递的值
- 处理构造函数C++中的Try-catch块
- 使用 VC++ 中的 Try 和 catch 块捕获内存访问冲突
- 在try-catch语句中的try块和所有catch时钟的末尾执行相同的操作
- c++异常处理程序中嵌套的try..catch
- C++ 向量不会在 try-catch 中声明
- c++从文件中读取:使用.fail()或try/catch的if条件
- 函数的try-catch语法的区别