Ich habe eine Klasse, in der die Bewegungszuweisung explizit gelöscht wird, da das Objekt nicht beweglich sein soll. Aber wenn ich auf eine Instanz dieser Klasse zuweisen mit RVO der Compiler gibt mir den Fehler:Compiler verwendet keine Kopierzuweisung statt verschieben?
main.cpp:12:16: note: candidate function has been explicitly deleted
auch der Compiler die vorhandene Kopie Zuweisungsoperator ist zu erwähnen, aber nicht verwendet es nicht.
hier ist mein Code (oder ein (nicht) läuft Beispiel here):
class foo {
public:
foo() {}
foo(foo const& r) {}
foo(foo&&) = delete;
foo const& operator=(foo const& r) { return *this; }
foo const& operator=(foo&& r) = delete;
};
int main(int argc, char **argv) {
foo bar;
bar = foo();
return 0;
}
fand ich eine ganz ähnliche Position here.
Ich weiß, ich kann dies vermeiden, indem Sie eine temporäre verwenden. Ich frage mich, warum jeder Compiler (ich testete dies mit gcc, clang und vs2013) nicht in der Lage ist, die bestehende Kopie Zuordnung direkt aufzurufen? Gibt es etwas, das mir fehlt?
Der Umzug Zuweisungsoperator ist ein besseres Spiel. Das passiert, bevor man bedenkt, dass es gelöscht wird. – chris
gelöschte Funktionen nehmen an der Überlastungsauflösung teil. – 101010
Löschen Sie einfach nicht die Bewegung Assingment und alles wird gut. Das Vorhandensein von Nicht-Bewegung 1 wird den Standard verhindern. – SergeyA