通过成员函数将唯一ptr的向量附加到另一个

时间:2017-11-15 20:56:17

标签: c++ smart-pointers unique-ptr

我想将一个唯一ptrs的向量移动到我存储在类中的唯一ptrs向量。我已经将这个减少到最小的例子:

#include <iostream>
#include <memory>
#include <vector>
using namespace std;

class A
{
public:
    A() = default;  
};


class B
{

public:

    void AddAs(const vector<unique_ptr<A>>& vv)
    {

        vec.insert(vec.end(),
            std::make_move_iterator(vv.begin()),
            std::make_move_iterator(vv.end())
        );
    }

    vector<unique_ptr<A>> vec;
};


int main() {    
    vector<unique_ptr<A>> v;
    for(int i=0; i<10; ++i)
    {
        v.push_back(make_unique<A>());
    }
    B b;
    b.AddAs(v);

    return 0;
}

https://ideone.com/76iNIM

这是尝试按照Inserting a vector of unique_ptr into another vector

的回答

但是这不会编译,因为它说使用了复制操作符。

我确信这是一个愚蠢的问题,但我是C ++的新手,我很难看到副本的位置。

谢谢

1 个答案:

答案 0 :(得分:1)

您无法从通过const引用传递的向量移动,因为移动需要修改。因此,将该方法更改为:

void AddAs(vector<unique_ptr<A>>&& vv)

按值传递也有效:

void AddAs(vector<unique_ptr<A>> vv)

请注意,您需要更改主叫代码:

b.AddAs(std::move(v));

实际上很好,因为它向读者显示了矢量将被移动。

live example