【发布时间】:2022-01-07 22:58:30
【问题描述】:
我正在尝试将 unique_ptr 传递给自定义矢量类,但我收到主题标题中的错误。
我了解您无法复制 unique_ptr,因此我在传递它时尝试使用 std::move() ,但这似乎并不能解决我的问题...我哪里出错了?
提前致谢
template<typename T>
class VectorSelectable {
public:
void Add(const T& v) {
m_Items.push_back(move(v));
}
private:
vector<T> m_Items;
};
class FunctionType {
int m_Data;
};
int main()
{
VectorSelectable<unique_ptr<FunctionType>> vec;
vec.Add(move(make_unique<FunctionType>()));
return 0;
}
编辑:将 'const' 添加到 'Add(const T& v)'
【问题讨论】:
-
您知道您从
std::move获得的右值引用已经衰减回Add方法中的左值引用,因为您编写了参数列表T& v。如果你想让它占用T&& v,你必须写那个。 -
移动
const对象在大多数情况下会导致复制...
标签: c++ unique-ptr deleted-functions