On Thursday, 15 September 2016 at 21:21:12 UTC, Steven
Schveighoffer wrote:
You need to destroy structs by passing them by reference.
Passing a pointer just destroys the pointer.
In this example, you can destroy what b points at (and call its
destructor) via:
destroy(*b);
However, this will not fix the issue. This is because the
memory block is not marked as being destroyed already (so it
will run the dtor again). Class instances have a feature
whereby when you call destroy it marks the memory block as
already having the destructor run. Structs do not have this
feature. Classes can afford to store extra metadata, structs
cannot.
So the true fix here is to avoid allocating in the destructor
(which is a no-no for heap-allocated items). This may work, it
may not:
writefln("a is %s", a);
That makes it work. Thanks a lot! I thought the GC knew what had
already been destroyed, though. Thanks for letting me know that
only works for classes, that'll spare me a lot of trouble. Having
the destructor be run twice can be a bit of a hassle, but it's
nothing I can't find a workaround for.
Thank you all who replied! I'm sorry I chose the General room
instead of the Learn one. I really thought this was some kind of
bug (although it's pretty obvious it would've been reported by
someone else if it was).