众所周知,如果构造函数抛出异常,则包括成员数据和各种基类在内的所有完全构造的子对象都将以相反的顺序被销毁。但是,对于非委托构造函数,析构函数不会被调用。对于委托构造函数,当进入构造函数主体时,对象已经被构造,但是构造过程仍在继续。因此,问题是:如果委托构造函数从其主体中抛出异常,该类的析构函数是否会被调用?
class X
{
public:
X();
X(int) : X() { throw std::exception(); } // is ~X() implicitely called?
~X();
};
X
不是X
的成员对象,那么为什么会调用它的析构函数呢? - Praetorian