`SharedPtr` is indeed the way to go. Either that or `UniquePtr`, `ConstPtr`, or the new `Isolate` construct depending on your usecase. As you point out ARC by default doesn't use atomic ref counting, so sharing refs is quite tricky. The possibility of race conditions from destructors and such are simply too finicky to deal with. `refc` basically had to copy data or use raw pointers.
As an aside maybe `SharedPtr` should be resamed `SharedRef`?