D - auto/double destruction bug?
- Scott McCaskill (41/41) Aug 30 2003 While investigating how D behaves when an exception is thrown from a
- Scott McCaskill (1/13) Aug 30 2003
While investigating how D behaves when an exception is thrown from a
destructor, I came across the following "interesting" behavior:
class MyClass
{
~this()
{
printf("~MyClass\n");
throw new Exception("exception from dtor");
}
}
int main (char[][] args)
{
try
{
MyClass c = new MyClass;
}
catch (Exception e)
{
printf("caught exception: %.*s\n", e.toString());
}
return 0;
}
output:
~MyClass
caught exception: exception from dtor
~MyClass
<crash>
If I remvoe the "auto", I get this:
~MyClass
<crash>
I looked through the documentation, but couldn't find enough information to
allow me to deduce what the above program ought to do. More info on the
behavior of exceptions in D would really be helpful, especially for C++
programmers trying to figure out how to write exception-safe code in D :)
Also, has any consideration been given to adding something akin to throw()
as in C++? Preferably compiler-enforced, unlike C++. In C++ (and, I
suspect, in D) it's not possible to write exception-safe code unless you can
be sure that certain operations cannot throw. It seems like a
compiler-enforced nothrow specification could be really useful for that.
--
Scott McCaskill
Aug 30 2003
int main (char[][] args) { try { MyClass c = new MyClass;Doh. Of course, the above should be "auto MyClass c = new MyClass;".} catch (Exception e) { printf("caught exception: %.*s\n", e.toString()); } return 0; }
Aug 30 2003








"Scott McCaskill" <scott mccaskill.org>