The parameter declaration identifies rhs to be an rvalue reference, so this function will only be called when assigning a temporary vector to the current object, as in
v = get_vector();
The temporary vector returned by get_vector() will not be copied at all. Instead, its contents will be swapped (i.e., “moved”) into v, simply by interchanging the internal pointers in the respective vector objects. The old C++98 way using a const reference parameter requires allocating new memory, deleting the old memory, and copying the incoming contents into the current vector. All containers in C++11 have been rewritten to accommodate move semantics. Even if you never have to use rvalue references in your own code, you get a tremendous speedup by just using the new C++11 containers.