Ich versuche, zwei Vektoren von unique_ptr
(dh std::move
sie aus einem und in ein anderes) zu verschmelzen und ich laufe in eine "Verwendung der gelöschten Funktion ... "Wand des Fehlertextes. Entsprechend dem Fehler, versuche ich anscheinend unique_ptr
's gelöschten Kopiekonstruktor zu benutzen, aber ich bin nicht sicher, warum. Unten ist der Code:'Verwendung der gelöschten Funktion' beim Zusammenführen zweier Vektoren von 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;
}
Vielen Dank! Das scheint es getan zu haben! Ich nehme an, dass die Veränderlichkeit für die Bewegungssemantik sinnvoll ist, da der Vektor anderer als Ergebnis ungültig wird. –
@AUD_FOR_IUV Willkommen bei Stack Overflow! :-) – jotik