RCArray is unsafe
Walter Bright via Digitalmars-d
digitalmars-d at puremagic.com
Mon Mar 2 12:37:03 PST 2015
On 3/1/2015 12:51 PM, Michel Fortin wrote:
> That's actually not enough. You'll have to block access to global variables too:
>
> S s;
>
> void main() {
> s.array = RCArray!T([T()]); // s.array's refcount is now 1
> foo(s.array[0]); // pass by ref
> }
> void foo(ref T t) {
> s.array = RCArray!T([]); // drop the old s.array
> t.doSomething(); // oops, t is gone
> }
Thinking about it, there are many other ways this can happen. At the moment, I'm
stuck thinking of a solution other than requiring foo() to be pure. Anyone have
ideas?
More information about the Digitalmars-d
mailing list