dieses minimal Beispiel vor:Wertersatz ohne den Zuweisungsoperator
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "Making A" << endl; }
A& operator=(const A& other) = delete;
};
int
main(int argc, char* argv[])
{
A a;
a = A();
return 0;
}
compilieren gibt die folgenden Fehler:
$ g++ -std=c++11 -Wall test.cc -o test && ./test
test.cc: In function ‘int main(int, char**)’:
test.cc:17:7: error: use of deleted function ‘A& A::operator=(const A&)’
a = A();
^
test.cc:9:8: error: declared here
A& operator=(const A& other) = delete;
^
Ich will „Reset“ den Wert von a
zu einem neu errichteten A
. Gibt es eine Möglichkeit für mich, nur den Konstruktor zu verwenden? Das heißt, ohne den Zuweisungsoperator zu verwenden, der in meinem Real-World-Code gelöscht werden muss? Ich habe zum Beispiel versucht, std::move
a la a = std::move(A());
zu verwenden, aber das gibt den gleichen Fehler.
Können Sie nicht 'A & operator = (A &&) = default;'? – Jarod42
Warum müssen Sie den Zuweisungsoperator löschen? Das ist eine ziemlich merkwürdige Anforderung. –
@NirFriedman In meinem Code 'operator =' ist implizit gelöscht und es ist nicht einfach für mich, es hinzuzufügen. – firebush