30.04.2013 1:04, "Luís Marques" <luismarq...@gmail.com>" пишет:
This crashes in the last line of main:
class A
{
void foo() {}
}
void main()
{
A a = new A();
a.foo();
clear(a);
assert(a !is null);
a.foo(); // crashes
}
As far as I understand from TDPL book, this should not crash, but it
does (DMD64 v2.062, OS X). Am I misunderstanding clear()?
BTW, why not make clear also change 'a' to null?
Ideally is should throw with pretty message but it isn't implemented.
See Issue 8139 - Make objects really disposable by addition of "Object
finalized" assertion [1].
IMO, also `destroy` (renamed `clear`) looks like the worst mistake in D
runtime and I'd recommend to not use it (or better recompile
druntime+phobos without it for your own use). See Issue 9139 - `destroy`
is dangerous and inconsistent [2]. Use
`unstd.lifetime.finalizeClassInstance` [3] and friends for user-defined
lifetime implementation to avoid serious problems.
[1] http://d.puremagic.com/issues/show_bug.cgi?id=8139
[2] http://d.puremagic.com/issues/show_bug.cgi?id=9139
[3]
http://denis-sh.github.io/phobos-additions/unstd.lifetime.html#finalizeClassInstance
--
Денис В. Шеломовский
Denis V. Shelomovskij