> Apparently, this is enough of an issue that C++20 added a partial template specialization to std::atomic<std::shared_ptr>. My advice, though, would be "don't do that!". Instead, keep your shared pointer in a single thread, and send copies to other threads as needed.
This is to support an atomic lock-free shared_ptr. You can then use this as a building block for building lock-free data structures.