On Friday, 11 August 2017 at 22:36:27 UTC, bitwise wrote:
On Friday, 11 August 2017 at 19:01:44 UTC, Yuxuan Shui wrote:
On Friday, 11 August 2017 at 18:44:56 UTC, bitwise wrote:
[...]
My guess is a pointer to the array still lives somewhere on
the stack. This gives the expected output:
void f()
{
S[] x = [S(1), S(1)];
writeln("GC allocated: ", (GC.addrOf(x.ptr) !is null));
x = null;
}
int main(string[] argv)
{
f();
GC.collect();
writeln("live objects: ", S.count);
return 0;
}
Makes sense. I was uncommenting unit tests one-by-one after
making some changes when I triggered this. I guess they were
passing before because subsequent unit tests cleared the
pointers off the stack. I guess I can just call a function that
allocates a large zeroed-out array on the stack in the last
unit test before checking the count if this happens again.
Thanks
Collect - is a hit to the GC, not an order. It can ignore this
request.
Also do not rely on the gc calling a dtor - it is not safe and
can be called totally randomed, so use RC instead or expicit
destroy()