Is it supposed to be safe to throw inside struct destructors?

Marco Leise Marco.Leise at gmx.de
Mon Apr 7 16:01:13 PDT 2014


Am Mon, 07 Apr 2014 21:36:34 +0000
schrieb "monarch_dodra" <monarchdodra at gmail.com>:

> 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 :/

Aye!

-- 
Marco



More information about the Digitalmars-d mailing list