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