移动 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))
{}