strange work of GC

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Feb 6 13:07:13 PST 2015


On Friday, 6 February 2015 at 20:38:07 UTC, Andrey Derzhavin 
wrote:
> As I think, the garbage collector should start destoying of the 
> C1 and C2 objects of arr array during the "while" cycle 
> prosess, but this does not
> happen. Dtors are not called.

Garbage is only collected when you allocate memory. You're just 
`sleep`ing in the loop which doesn't allocate anything, and so it 
doesn't trigger garbage collections.

> If I use the manual destroying of objects C1 and C2 by 
> "destroy" method, the dtors of C1 and C2 objects are normally 
> called, but it can't be safe.

right

> If I use the GC.collect method after fn1, I get an error: 
> "core.exception.InvalidMemoryOperationError@(0)".
> Is this a bug of GC or I do something wrong?

This is you GC allocating in a destructor (the writeln calls). 
The GC can't handle that.


More information about the Digitalmars-d-learn mailing list