为什么shared_ptr有一个移动构造函数

tml*_*len 7 c++ stl language-lawyer c++11

在C++ 11中std::shared_ptr有一个移动构造函数和移动赋值运算符.

有没有理由需要这样做,即如果只有复制构造函数和赋值运算符,任何使用它的程序会有不同的行为吗?

似乎它的唯一影响是避免了参考计数器的额外增量和后来的减少.

Ker*_* SB 27

复制共享指针非常昂贵,因为内部引用计数需要以原子方式修改并使用正确的内存顺序,这可能会导致总线锁和栅栏.(回想一下,多个线程可能正在复制它们自己的本地共享指针,它们拥有相同的对象.)当你真正想要所有权从一个对象转移到另一个对象时,这些都不需要,并且移动是优越的.