移动 unique_ptr<T> 的矢量
Moving a vector of unique_ptr<T>
所以我有一种情况需要存储抽象类型的向量,据我所知,这需要使用 unique_ptrs 或类似的向量。
因此,为了移动包含 unique_ptrs 向量的 class 的实例,我需要定义一个我已经完成的移动构造函数。
然而,如下例所示,这似乎与编译器 (msvc) 不一致,编译器 (msvc) 给出了以下错误。
Error 1 error C2280: 'std::unique_ptr>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function
class SomeThing{
};
class Foo{
public:
Foo(){
}
Foo(const Foo&& other) :
m_bar(std::move(other.m_bar))
{};
std::vector<std::unique_ptr<SomeThing>> m_bar;
};
int main(int argc, char* argv[])
{
Foo f;
return 0;
}
您不能从 const
事物移动,因为移动涉及源的突变。
因此,正在尝试复制。而且,如您所知,这在这里是不可能的。
您的移动构造函数应该如下所示,没有 const
:
Foo(Foo&& other)
: m_bar(std::move(other.m_bar))
{}
所以我有一种情况需要存储抽象类型的向量,据我所知,这需要使用 unique_ptrs 或类似的向量。
因此,为了移动包含 unique_ptrs 向量的 class 的实例,我需要定义一个我已经完成的移动构造函数。
然而,如下例所示,这似乎与编译器 (msvc) 不一致,编译器 (msvc) 给出了以下错误。
Error 1 error C2280: 'std::unique_ptr>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function
class SomeThing{
};
class Foo{
public:
Foo(){
}
Foo(const Foo&& other) :
m_bar(std::move(other.m_bar))
{};
std::vector<std::unique_ptr<SomeThing>> m_bar;
};
int main(int argc, char* argv[])
{
Foo f;
return 0;
}
您不能从 const
事物移动,因为移动涉及源的突变。
因此,正在尝试复制。而且,如您所知,这在这里是不可能的。
您的移动构造函数应该如下所示,没有 const
:
Foo(Foo&& other)
: m_bar(std::move(other.m_bar))
{}