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!