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

时间:2016-12-01 11:12:03

标签: c++ c++11 stl language-lawyer

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

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

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

1 个答案:

答案 0 :(得分:27)

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