On Monday, 7 April 2014 at 19:19:18 UTC, Dmitry Olshansky wrote:
07-Apr-2014 12:33, Marco Leise пишет:
I would like to hear a definite answer on this. A failure in
~this() leaves the program in an undefined state. You cannot
back out of returning from a function that needs to perform
cleanup on stack structs. Constructors do not have this
problem. With scope(failure) you can guard all resources and
guarantee cleanup after an exception is thrown.

There is exception chaining for that. All collateral exceptions get appended to a list. IIRC throw in a destructor while exception is in flight breaks out of this particular destructor, other if any are then executed in turn.

That's the theory, but in practice, throwing an exception allocates, and you can't allocate if you are in a GC collect cycle.

So it's kind of back to square 1 in terms of throwing in destructors: Don't do it :/

Reply via email to