【发布时间】:2011-01-02 20:01:12
【问题描述】:
是否可以在这些情况下处理异常:
- 在进入 main() 之前从构造函数抛出
- 离开 main() 后从析构函数中抛出
【问题讨论】:
-
因此,根据所有建议,是否可以安全地得出以下结论:(1)即使在构造函数/析构函数周围使用 try-catch 块,异常仍然会被重新抛出。 (2) 如果这种情况发生在 main() 范围之外,即全局对象的初始化,或者终止期间正常对象的自动反初始化,则无法捕获异常。
-
不完全。 ctor 可以仅通过异常指示失败,因为您不能在不构造对象的情况下让 ctor 结束;因此,捕获 ctor 抛出的异常不能违反这一点。您必须从 dtor 捕获任何潜在的异常,因为 dtor 是作为堆栈展开的一部分调用的(当抛出异常时会发生这种情况)。如果你不这样做,那么你有 两个 异常同时处于活动状态,这会让你得到 std::terminate()。
-
我正在阅读 Stroustrup 的标题中的这个主题。从他的解释来看,对我来说,一切听起来都像是痛苦的设计。
标签: c++ exception-handling main