RCArray is unsafe
Zach the Mystic via Digitalmars-d
digitalmars-d at puremagic.com
Tue Mar 3 10:22:50 PST 2015
On Tuesday, 3 March 2015 at 17:40:59 UTC, Marc Schütz wrote:
> All instances need to carry a pointer to refcount anyway, so
> the freelist could just be stored next to the refcount. The
> idea of creating that list, however, is more worrying, because
> it again involves allocations. It can get arbitrarily long.
If the last RcType is a global, will the list ever get freed at
all?
> No, Andrei's proposed solution would take care of that. On
> assignment to RCArray, if the refcount goes to zero, the old
> array is put onto the cleanup list. But there can still be
> borrowed references to it's elements. However, these can never
> outlive the RCArray, therefore it's safe to destroy all of the
> arrays in the cleanup list in the destructor.
Wouldn't you need a lifetime system for this? A global, for
example, couldn't borrow safely. I'm all in favor of an
ownership/borrowing system, but that would be for a different
DIP, right? It seems like taking the address of a sub-element of
an RcType is inherently unsafe, since it separates the memory
from the refcount.
More information about the Digitalmars-d
mailing list