Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does shared_ptr have a move constructor

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.

like image 822
tmlen Avatar asked Dec 01 '16 11:12

tmlen


1 Answers

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.

like image 124
Kerrek SB Avatar answered Oct 21 '22 05:10

Kerrek SB