2014-06-12 131 views

回答

3

析构函数将不会被调用,因为foo对象没有被认为是完全建立,直到一个构造函数执行完毕(注意,这意味着如果你抛出一个委托给不同构造函数的构造函数,然后将调用的析构函数)。从构造函数中抛出不是未定义的行为。

+0

这个答案似乎收缩quantdev的 –

+0

@YogiBear这个答案是正确的。幸运的是,你很容易测试自己。 – Simple

+0

我做了测试,但我从老板那里继承了“未定义行为”的紧张情绪! –

1

对象的生命周期从其构造函数完成其执行时开始。这意味着,在构造函数执行结束之前,该对象从不存在。所以,没有活的对象,因此,没有析构函数可以调用。

因此,没有未定义的行为,除非创建异常对象引发另一个异常。在这种情况下,程序中断。但是,在异常之前完全构造的任何其他对象都会被适当地破坏,包括基本子对象,其他成员对象,在引发异常的函数的相同范围内声明的本地对象,以及之前范围的任何其他对象, t赶上那个例外。

检查出来,堆栈展开(在stackoverflow,谷歌和维基百科,按照优先顺序)。

相关问题