«использование удаленной функции» при объединении двух векторов unique_ptr

Я пытаюсь объединить два вектора unique_ptr (Т.е. std::move их из одного в другое), и я продолжаю сталкиваться с «использованием удаленной функции …» стена текста ошибки. По ошибке я видимо пытаюсь использовать unique_ptrКонструктор удаленных копий, но я не уверен почему. Ниже приведен код:

#include <vector>
#include <memory>
#include <algorithm>
#include <iterator>

struct Foo {
int f;

Foo(int f) : f(f) {}
};

struct Wrapper {
std::vector<std::unique_ptr<Foo>> foos;

void add(std::unique_ptr<Foo> foo) {
foos.push_back(std::move(foo));
}

void add_all(const Wrapper& other) {
foos.reserve(foos.size() + other.foos.size());

// This is the offending line
std::move(other.foos.begin(),
other.foos.end(),
std::back_inserter(foos));
}
};

int main() {
Wrapper w1;
Wrapper w2;

std::unique_ptr<Foo> foo1(new Foo(1));
std::unique_ptr<Foo> foo2(new Foo(2));

w1.add(std::move(foo1));
w2.add(std::move(foo2));

return 0;
}

3

Решение

Вы пытаетесь отойти от постоянного Wrapper объект. Обычно семантика перемещения также требует, чтобы объект, от которого вы удаляетесь, был изменчивым (т.е. не const). В вашем коде тип other параметр в add_all метод const Wrapper&, следовательно other.foos также относится к постоянному вектору, и вы не можете от него уйти.

Изменить тип other параметр для Wrapper& чтобы это работало.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]