如何从构造函数返回错误代码?

van*_*ula 4 c++ constructor exception return-code

我试图从构造函数返回错误代码,因为构造函数不返回错误代码,我试图在构造函数上放置一个异常.然后在catch块中我返回适当的错误代码.这是从构造函数返回错误代码的正确方法吗?

#include <exception>
#include <iostream>

class A {
 public:
  A() { throw std::runtime_error("failed to construct"); }
};

int main() {
  try {
    A a;
  } catch (const std::exception& e) {
    std::cout << "returining error 1 \n";
    return 1;
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Hat*_*Kun 9

根据isocpp.org,在C++中处理构造函数失败的正确方法是:

抛出一个例外.

由于构造函数没有返回类型,因此无法使用错误代码.但是:

如果您没有使用异常的选项,那么"最不好"的解决方法是通过设置内部状态位将对象置于"僵尸"状态,这样对象的行为有点像死了,即使它是技术上还活着.

但是如果可以的话,你应该使用异常来表示构造函数中的失败,如上所述:

在实践中,"僵尸"的东西变得非常难看.当然你应该比zombie对象更喜欢异常,但是如果你没有使用异常的选项,那么僵尸对象可能是"最不好"的选择.


小智 1

没有办法做到这一点。最好的方法可能是使用一个静态init()方法,该方法将返回类的实例并使构造函数成为私有的。您可以从该方法中完成大部分构造init,然后仅返回一个错误代码。