On Fri, 01 Feb 2013 10:46:11 -0500, monarch_dodra <[email protected]> wrote:

On Friday, 1 February 2013 at 15:37:25 UTC, Steven Schveighoffer wrote:

This is a GC limitation, since structs do not contain a pointer to their typeinfo like classes do, and there is no provision for storing a pointer to the typeinfo of a block. It could be fixed by a more precise GC. AIUI, we have something like that coming, but I've been hearing that for more than a year ;)

-Steve

Oh. Wow. That's news to me.

I'd say as long as you don't new your structs, you are fine, but apparently, dynamic arrays don't clean up after themselves either (!) That's a whole other ballgame...

Dynamic arrays do clean up the array memory. For arrays of objects, or arrays of structs that have only GC-based resources, those items are also individually cleaned up by the GC. But if you had, for instance, an array of self-closing file descriptor structs, those would NOT be cleaned up by the GC.

That's quite scary. It brings back into question a few of my implementations...

People should definitely be aware of this limitation. It usually is not of any concern because it is rare to have a struct that has a non-GC reference on the heap. But it is something to be aware of.

Note that if your struct is a *member* of a class, it's destructor will be called because it's destructor is called as part of the object's destructor. But this isn't always what you want!

I think people have been harping on this limitation of File (and reference-counted structs in general) for a long time. There is a bugzilla issue for it somewhere.

-Steve

Reply via email to