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