On 2011-05-13 08:06, Michel Fortin wrote:
> On 2011-05-13 09:44:33 -0400, Don <[email protected]> said:
> > If the GC calls it, it's a finalizer, not a destructor.
> > 
> > Structs have destructors, and it's perfectly OK to throw inside them.
> 
> Really? What if you allocated the struct on the heap, as a member of a
> class, or in an array? The struct will be on the heap and its
> destructor will become the finalizer.
> 
> What you say about structs makes sense only as long as structs are
> confined to the stack. In reality, structs can also be on the heap.
> 
> Discussion for bug 4621's has a long discussion about this issue.
> <http://d.puremagic.com/issues/show_bug.cgi?id=4621>

Well, assuming that a struct's destructor is called when it's garbage 
collected from the heap (which as I recall, doesn't ever happen at this 
point), couldn't the GC just catch any exceptions that it throws and then 
throw the appropriate Error? Then the destructor could throw just fine while 
it's on the stack, but you'd get the FinalizerError (or whatever it's called) 
when it happens on the heap.

- Jonathan M Davis

Reply via email to