构造函数中抛出异常:析构函数是否被调用?

P45*_*ent 6 c++

如果对象的构造函数抛出异常,那么析构函数会被调用吗?或者这是未定义的行为?(这就是为什么我不愿意说出我的编译器的作用。)

struct foo()
{
    foo(){
        throw "bar";
    }
    ~foo(){
        /*am I called*/
    }
};

foo f;
Run Code Online (Sandbox Code Playgroud)

Sim*_*ple 5

析构函数不会被调用,因为在foo构造函数完成执行之前,对象不被视为完全构造(请注意,这意味着如果您抛出委托给不同构造函数的构造函数,则将调用析构函数)。从构造函数抛出并不是未定义的行为。