On Friday, 27 February 2015 at 20:30:20 UTC, Steven Schveighoffer wrote:
OK, I found the offending issue. It's when you pass a parameter, the only reference holding onto it may be also passed as well. Something like:

void foo(C c, C2 c2)
{
c2.c = null; // this destroys 'c' unless you opAddRef it before passing
   c.someFunc(); // crash
}

void main()
{
C c = new C; // ref counted class
C2 c2 = new C2; // another ref counted class
c2.c = c;
foo(c, c2);
}

How does the compiler know in this case that it *does* have to opAddRef c before calling? Maybe your ARC expert can explain how that works.

Split-passing nested ref-counted classes with null loads! How insidious!

Reply via email to