I have been looking through the Clang source code and I found this snippet:
void CompilerInstance::setInvocation( std::shared_ptr
At least with libstdc++ you should get the same performance with move and assignment because operator= calls std::move on the incoming pointer. See: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/shared_ptr.h#L384
operator=
std::move