std.container: fork in the road
via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jun 17 02:59:03 PDT 2015
On Wednesday, 17 June 2015 at 06:08:57 UTC, Andrei Alexandrescu
wrote:
> Consider e.g. "SList!T.clear()". Right now it's O(1) and only
> reassigns the root to point to no element, thus leaving all
> elements to be collected. Moreover, if there are ranges
> iterating the now cleared list, they'll just continue wandering
> in the desert as if nothing happened.
>
> What I think SList should do is first switch to a refcounted
> implementation. Then, clear() should call destroy() for
> payloads of all nodes, safely invalidate all ranges, and
> deallocate memory allocated for all nodes.
I think this decision should be left to the end-user. A container
that supports only RC is just as bad as one that supports only
GC. Instead, use SList!T or SList!(Unique!T) or
SList(RefCounted!T) as appropriate.
All internal metadata, on the other hand, should be treated as
owned by the container. Calling clear() or removing individual
elements needs to destroy the associated meta data, which in turn
will correctly call the payload's (e.g. RefCounted!T or Unique!T)
destructor if it has one.
More information about the Digitalmars-d
mailing list