【发布时间】:2017-09-15 00:33:02
【问题描述】:
对于通过值与引用传递共享指针,很少有好的答案。但是,我没有找到关于“移动”共享指针的最佳实践的答案。
我有一个函数,它有一个指向对象的共享指针,它不想持有。据我了解,移动它是性能方面的最佳选择,因为我们可以跳过增加然后立即减少引用计数的步骤。但是,我不清楚这两个声明之间是否有区别:
调用函数
foo(std::move(sourcePtr));
声明应该是
选项 1
void foo(std::shared_ptr<X> x);
或选项 2
void foo(std::shared_ptr<X>&& x);
【问题讨论】:
-
这取决于函数对
shared_ptr的作用。例如,如果函数什么都不做,在第一种情况下,调用者的shared_ptr被移出,在第二种情况下则没有。 -
函数是否只使用指向的对象?还是它会修改 hared_ptr` 本身?
-
只持有强引用,不修改对象。
标签: c++ c++11 shared-ptr move-semantics