It doesn't hurt to have obj be a reference here (usually - temporary rvalues might be an issue) but using copy semantics here would be okay too.

A Local (a Handle too) is essentially a pointer wrapped in a struct.  You don't gain much by passing references around because copying the object is as cheap as referencing it.

A copy might even be cheaper because it removes a layer of indirection.  Though I'm reasonably sure that in this case the compiler will generate the same code for a reference because this method is great inlining material.

/digression