如果对象的构造函数抛出异常,那么析构函数会被调用吗?或者这是未定义的行为?(这就是为什么我不愿意说出我的编译器的作用。)
struct foo()
{
foo(){
throw "bar";
}
~foo(){
/*am I called*/
}
};
foo f;
Run Code Online (Sandbox Code Playgroud)
析构函数不会被调用,因为在foo构造函数完成执行之前,对象不被视为完全构造(请注意,这意味着如果您抛出委托给不同构造函数的构造函数,则将调用析构函数)。从构造函数抛出并不是未定义的行为。