std::move exists and works perfectly with std::shared_ptr. No need to do any atomic work at all when moving around std::shared_ptr's
Still, it's just too many layers of complexity for my taste. Nailing performance problems in C is a Sunday walk in the park in comparison.
Live and let live, I was just sharing my experience of going back and forth.