Re:Investigating the Performance Overhead of C++ Exceptions
by daemin on Wednesday February 12, 2020 @06:16AM
(#22307875)
Throwing during destructors will generally result in a std::terminate, since you have good odds of throwing during destruction of an object that is being cleaned up as a result of an existing in progress exception.
So it is not forbidden but odds are you'll have your program terminate.
As to your first paragraph: That's just calling the base class's destructor if the derived class's constructor throws. That's easy - that's what the base class's destructor is for. It's essentially one function call. The harder part (or so it seems to me) is correctly destroying the only-partially-constructed derived class.