移动unique_ptr <t>的向量

时间:2015-07-14 17:15:27

标签: c++ c++11 vector move-semantics unique-ptr

所以我需要存储一个抽象类型的向量,因为我知道这需要使用unique_ptrs或类似的向量。

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

然而,正如下面的例子所示,这似乎不同意编译器(msvc),它给我以下错误。

  

错误1错误C2280:&#39; std :: unique_ptr&gt; :: unique_ptr(const std :: unique_ptr&lt; _Ty,std :: default_delete&lt; _Ty&gt;&gt;&amp;)&#39; :尝试引用已删除的函数

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;
}

1 个答案:

答案 0 :(得分:7)

你不能从const移动,因为移动涉及源的变异。

因此,正在尝试复制。而且,如你所知,这在那里是不可能的。

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

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