C++ 移动唯一的向量_ptr<;T>;

C++ 移动唯一的向量_ptr<;T>;,c++,c++11,vector,move-semantics,unique-ptr,C++,C++11,Vector,Move Semantics,Unique Ptr,所以我有一种情况,我需要存储一个抽象类型的向量,因为我知道这需要使用一个唯一的或类似的向量 因此,为了移动包含唯一_ptr向量的类的实例,我需要定义一个我已经完成的移动构造函数 但是,正如下面的示例所示,这似乎与编译器(msvc)不一致,后者给出了以下错误 错误1错误C2280:'std::unique_ptr>::unique_ptr(const std::unique_ptr&'):尝试引用已删除的函数 分类{ }; 福班{ 公众: Foo(){ } Foo(const Foo&其他): m

所以我有一种情况,我需要存储一个抽象类型的向量,因为我知道这需要使用一个唯一的或类似的向量

因此,为了移动包含唯一_ptr向量的类的实例,我需要定义一个我已经完成的移动构造函数

但是,正如下面的示例所示,这似乎与编译器(msvc)不一致,后者给出了以下错误

错误1错误C2280:'std::unique_ptr>::unique_ptr(const std::unique_ptr&'):尝试引用已删除的函数

分类{
};
福班{
公众:
Foo(){
}
Foo(const Foo&其他):
m_条(标准::移动(其他.m_条))
{};
std::向量m_条;
};
int main(int argc,char*argv[])
{
福福;
返回0;
}

你不能从一个
常量
对象中移动,因为移动涉及到源代码的变异

因此,正在尝试复制。你知道,这在这里是不可能的

您的移动构造函数应该如下所示,没有
const

Foo(Foo&& other)
    : m_bar(std::move(other.m_bar))
{}

去掉<代码> const <代码>。Visual C++的哪个版本?因为这在VS2013之前是不受支持的,所以请去掉注释中的答案。@paulm解决了这个问题,我习惯于使用const before引用参数,没有意识到它在移动构造函数中的重要性,您想将其作为答案发布,我会接受。不妨接受orbits的答案
Foo(Foo&& other)
    : m_bar(std::move(other.m_bar))
{}