Ral*_*zky 15 c++ constructor exception c++11
众所周知,如果构造函数抛出,则所有完全构造的子对象将以相反的顺序销毁,包括成员数据和各种基类.但是,析构函数不会被调用非委托构造函数.对于委托构造函数,在输入构造函数体时已构造对象,但构造仍在继续.因此,如果委托构造函数从其体内抛出异常,则会出现是否调用类的析构函数的问题?
class X
{
public:
X();
X(int) : X() { throw std::exception(); } // is ~X() implicitely called?
~X();
};
Run Code Online (Sandbox Code Playgroud)
Jam*_*nze 14
规则是为所有完全构造的对象调用析构函数.一旦任何构造函数完成,该对象被认为是完全构造的,包括委托的构造函数(即使程序在另一个构造函数中继续).