【发布时间】:2013-07-13 12:36:29
【问题描述】:
众所周知,如果构造函数抛出,那么所有完全构造的子对象都会以相反的顺序被销毁,包括成员数据和各种基类。但是,非委托构造函数不会调用析构函数。对于委托构造函数,当进入构造函数主体时,对象已经被构造,但构造仍在继续。因此,如果委托构造函数从其体内抛出异常,是否会调用类的析构函数?
class X
{
public:
X();
X(int) : X() { throw std::exception(); } // is ~X() implicitely called?
~X();
};
【问题讨论】:
-
X不是X的成员对象,为什么要调用它的析构函数呢? -
@Praetorian:因为它已经完全由委托构造函数构造了;因为标准说它会。
-
好问题,但重复,因此-1
-
我真的不喜欢一个问题被认为是重复的,即使原始问题的提出方式很难通过搜索找到它。至少我希望正在寻找这个问题答案的人能在这里找到它。
标签: c++ exception c++11 constructor