Garbage-collected structs vs garbage-collected classes
Jonathan M Davis
jmdavisProg at gmx.com
Sat Jan 22 21:37:05 PST 2011
On Saturday 22 January 2011 17:27:18 Sean Eskapp wrote:
> When I was using a class to wrap SDL functions and structs, I would have a
> problem that Derelict would unload before the garbage-collector cleaned up
> my classes, resulting in errors when these classes destructed and tried to
> call SDL functions in the process. However, the exact same code using
> structs to wrap instead of classes does not produce these errors. For
> example, rather than using
> scope screen = new Screen(800, 600)
> where Screen is a scope class, I'm using
> auto screen = new Screen(800, 600)
> where Screen is a struct. This also provides me the advantage of being able
> to use delegates which use screen. Is there a reason for this?
Well, IIRC struct destructors don't currently ever get called for any structs on
the heap. So, there's no way that you'd get a problem when such a destructor
runs, because it never runs.
There are several bugs relating to struct destructors, and I'm not 100% sure
what the current state of them is (I believe that they work properly for normal
RAII), but in particular, for the moment, don't create a struct with new and
expect its destructor to be run.
http://d.puremagic.com/issues/show_bug.cgi?id=2834
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list