我有一个用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 ++的新手。
答案 0 :(得分:9)
您应该使用std::move
。
std::unique_ptr<T>&&
是右值引用,而不是转发引用*。函数参数中的转发引用必须类似T&&
推导出T
,即声明函数的模板参数。
* 转发参考是您称之为通用参考的首选名称。