【问题标题】:C++ How to halt execution at failed object construction?C ++如何在对象构造失败时停止执行?
【发布时间】:2018-05-10 04:34:07
【问题描述】:

我有一个可能会抛出异常的构造函数,据我了解,一旦发生这种情况,就会调用解构函数。问题是我不知道如何检查对象是否实际构造成功。

我试过了

if (objectName) {
    //keep working
} else {
    //alert that something went wrong
}

但我了解到,在 C++ 中不能像在 Java 中那样拥有“空”对象,因为指针始终存在,但可能指向你不想要的东西。

然后我还尝试围绕对象实例化进行额外的尝试捕获,但执行只是继续正常进行。检查对象是否已成功构建并准备好使用的最佳做法是什么?

【问题讨论】:

标签: c++ exception constructor


【解决方案1】:
try {
    Type obj;
    //keep working
}
catch (/* ... */) {
    //alert that something went wrong
}

obj 仅在 try 块内可见。如果构造函数抛出,您将离开 try 块,因此 obj 不存在。所以这里没有“空实例”的概念。 obj 存在且有效,或者它不存在,因为异常导致离开 try 块。

【讨论】:

  • 感谢您的回复,这实际上是我在问题的第二部分中描述的那样,非常糟糕。问题是无论对象是否抛出错误,try 中的代码都会继续执行,这可能是什么原因造成的?
  • @Daniel 那是不可能的。如果构造函数抛出,程序将直接跳转到catch 语句。这里唯一合理的解释是你误解了正在发生的事情。您确定是构造函数(在这种情况下为Type::Type())引发了异常吗?
  • 嗨,我真的想通了,请在下面查看我的答案。最后还有一个问题希望有人回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多