在C ++ 11中std::shared_ptr
有一个移动构造函数和移动赋值运算符。
是否有必要这样做,即如果只有复制构造函数和赋值运算符,那么使用它的任何程序会有不同的行为吗?
似乎唯一的影响是避免了参考计数器的额外增量和后来的减少。
答案 0 :(得分:27)
复制共享指针非常昂贵,因为内部引用计数需要以原子方式修改并使用正确的内存顺序,这可能会导致总线锁和围栏。 (回想一下,多个线程可能正在复制它们自己的本地共享指针,这些指针拥有相同的对象。)当你真正希望将所有权从一个对象转移到另一个对象时,不需要这些,和移动是优越的。