I imagine std::move() has a bit more of a performance cost in the context of something like:
std::thread thrd(&func, this);
someArrOfThreads = std::move(thrd);
std::thread *thrd = new std::thread(&func, this);
someArrOfThreadPointers = thrd;
The only thing that
std::move does is turn a lvalue into an rvalue reference. This then causes the rvalue reference version of tge assigment operator to be call. From a code generation point of view it is a noop.
The rvalue overload is likely to be more efficient since it is allowed to move class internal as opposed to performing a deep copy.