On Thursday, 11 February 2016 at 03:47:09 UTC, Steven Schveighoffer wrote:
Misunderstanding.

An AA under the hood is simply a pointer. Initialized to null.

When you pass it around, you are passing a pointer. AA assign checks for null and allocates a new AA impl to hold the data. But this doesn't affect other copies (that were null).

So what is happening is aa() returns a null AA. You assign to it, which allocates a new AA impl, and sets the rvalue to point at it. The rvalue promptly disappears. The original m_aa is still set to point at null.

Makes sense (though it defies my intuition; I would have expected an NPE or crash at time of assignment). Thanks!

Reply via email to