Mein Code sieht aus wieWarum versucht der Compiler, den Rückgabewert zu kopieren, anstatt ihn zu verschieben?
// definition of class 'Foo'
class Foo
{
private:
vector<Bar> v;
public:
...
Foo(Foo&&) = default; // move constructor
};
// definition of function 'f'
Foo f()
{
Foo x;
DoStuff(x);
return x;
}
// Somewhere in main
result = f(); // I am aiming to move 'x' to 'result'
Als ich mich
EAL_1.6.cpp:314:13: error: object of type 'Foo' cannot be assigned because its copy assignment operator is implicitly deleted
x = f(x);
^
EAL_1.6.cpp:232:5: note: copy assignment operator is implicitly deleted because 'Foo' has a user-declared move constructor
Foo(Foo&&) = default;
^
erhalten zu kompilieren versuchen wurde ich
return move(x);
zu versuchen versucht, aber es scheint nicht eine clevere Lösung nach zu sein zu this post. Ich verstehe, dass der Cop-Konstruktor gelöscht wird, wenn man einen Move-Konstruktor definiert (wie in this post erklärt), aber ich verstehe nicht, wie man dem Compiler sagt, dass ich möchte, dass x in "result" verschoben wird.
Der Fehler und der Code zeigen zwei völlig verschiedene Dinge. Auch was ist 'Bar'? – 0x499602D2
Haben Sie 'Foo & operator = (Foo &&) = default;'? Weil es nicht implizit generiert wird. – krzaq