Do AAs allocate on removal?
Gerrit Wichert
gwichert at yahoo.com
Sat Dec 7 11:04:03 PST 2013
Am 07.12.2013 19:07, schrieb thedeemon:
>
> A quick glance into the source shows that removing an entry does not
> allocate, but calls GC.free(). Inserting an entry does allocate.
> Rehashing happens when entries are added, not when they are removed.
>
> Check your destructors again, make sure they are not called twice.
>
Thanks for your quick answer. So the call to GC.free() breaks it. Seems
easy to fix, just don't free and let the GC do its work. Whatever, I've
solved my problems by nulling out the value and calling a cleanup
routine before the next entry is added.
private static void cleanObjects()
{
if (shouldCleanObjects) {
foreach (key, val; objects) {
if (!val) {
objects.remove( key);
}
}
shouldCleanObjects = false;
}
}
Seems to work, but I'm not shure if it is save to remove entrys while
iterating. Can't find any advise at this.
Gerrit Wichert
More information about the Digitalmars-d
mailing list