在抛出未处理的异常后过早离开的析构函数是否会释放成员数据?

Does a destructor that left prematurely after throwing an unhandled exception frees member data?

据我所知,析构函数的工作顺序与构造函数相反:

** 出于好奇:如果析构函数引发异常而没有在那里处理它,那么它应该销毁成员数据还是不释放它们? (因为它过早离开,因此跳过了销毁阶段)。

 struct Bar{};

 struct Foo{
     ~Foo()noexcept(false){
         throw 1024;// leaves here prematurely
     }

     Bar b{};
 };

那么 Foo 的 Dtor 在抛出后不处理异常就释放 b 了吗?

** 我知道我不应该那样做,只是为了更多地了解异常处理的工作原理。谢谢!

If a destructor raises an exception without handling it there then should it Destroy member data

是的。

So does Foo's Dtor frees b after throwing without handling the exception?

b 有一个简单的类型,所以它的“析构函数”什么都不做。但是,是的,该成员已被销毁。成员没有被“释放”。

我还没有尝试过,但是根据 C++ Primer,如果一个真正的 class 析构函数抛出而没有捕获到它自身的异常,那么就会调用 Terminate,结束程序。