In C++11 std::shared_ptr
has a move constructor and move assignment operator.
Is there a reason why this is needed, i.e. would any programs using it behave differently if there were only the copy constructor and assignment operators?
It seems that the only effect of it is that the extra increment and later decrement of the reference counter is avoided.
Copying a shared pointer is very expensive, since the internal reference counts need to be modified atomically and with the correct memory ordering, which may incur bus locks and fences. (Recall that multiple threads may have be copying their own, local shared pointers that own the same object.) When you actually want to transfer ownership away from one and into another object, none of this is needed, and moving is superior.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With