std :: move或std :: forward,参数为std :: unique_ptr <t>&amp;&amp;

时间:2015-12-15 12:05:48

标签: c++ c++11

我有一个用C ++ 11编写的名为Push的方法的下面的模板类(剥离以仅包含相关部分):

template<class T, int Capacity>
class CircularStack
{
private:
    std::array<std::unique_ptr<T>, Capacity> _stack;

public:
   void Push(std::unique_ptr<T>&& value)
   {
      //some code omitted that updates an _index member variable

      _stack[_index] = std::move(value);
   }
}

我的问题是:

  

我应该在std::move内使用std::forward还是Push

我不确定std::unique_ptr<T>&&是否有资格作为通用参考,因此应使用forward而不是move

我是C ++的新手。

1 个答案:

答案 0 :(得分:9)

您应该使用std::move

std::unique_ptr<T>&&是右值引用,而不是转发引用*。函数参数中的转发引用必须类似T&&推导出T,即声明函数的模板参数。

* 转发参考是您称之为通用参考的首选名称。