如何在抛出异常时处理失败的构造函数是不允许的

rec*_*ion 2 c++ constructor exception

我正在查看Google C++样式指南,他们决定 不在C++代码中使用异常,而是依赖于返回值.

我的问题是:在这种情况下,如何处理构造函数中的失败,因为您无法在这些函数中返回值.

谢谢!

Dun*_*pen 7

我的第一直觉是将失败点从构造函数中取出,并创建一个初始化方法.

这样你可以创建你的对象而不用担心失败,然后调用init()函数.该函数可以返回类似int的成功/失败,例如,如果发生故障,则返回-1.

是的,这是一个额外的步骤,但它确实让你无法使构造函数失败

  • 请参阅http://www2.research.att.com/~bs/3rd_safe0.html,以获得有关不实现init()例程的优秀且非常详细的说明. (4认同)
  • @Dunker:在C++中?不要用C++编写Java,用C++编写C++程序. (2认同)

Joh*_*ohn 5

它相当丑陋,但做到这一点的方法是保留对象的“特殊状态”以表示“构造失败”。然后你必须查询该状态。啊!