Ich habe eine Klasse, die wiefür die Klasse mit einer großen Anzahl von Elementen
class A{
double a, b, c, d, e;
float af, bf, cf, df, ef;
std::vector<double> av, bv, cv, dv, ev;
std::vector<std::vector<double>> avv, bvv, cvv, dvv, evv;
A(){}
A(/*init values*/){/*Initialize all the values above using the input values*/}
~A(){}
}
Nun würde Ich mag einen Zuweisungsoperator implementieren, so dass ich tun kann (in einer zweiten Klasse):
class B{
private:
A ac, bc, dc;
public:
B(/*init values*/)
{
ac = A(/*init values*/);
bc = A(/*init values*/);
dc = A(/*init values*/);
}
~B(){}
}
ich weiß, dass ich What is the copy-and-swap idiom? und What are the basic rules and idioms for operator overloading? folgen können und implementieren
A& A::operator=(A rhs)
{
swap(rhs);
return *this;
}
und die jeweilige swap
-function:
friend void swap(A& first, A& second)
{
using std::swap;
swap(/*for each element*/);
}
tun so für alle Elemente ist anfällig für ein Element zu vergessen, was zu Fehlern in dem Code. Dasselbe gilt für Erweiterungen in der Zukunft, d. H. Hinzufügen von Variablen im Klassenheader, aber nicht in der Swap-Funktion. Gibt es dafür einen einfacheren Weg?
Sie wissen, dass Sie den Zuweisungsoperator nicht selbst schreiben müssen, aber der Compiler generiert wird, wird nur gut sein? – user463035818
Alle Ihre Elemente sind Typen mit der richtigen Wertesemantik. Sie müssen keine dieser Funktionen selbst implementieren. Der Compiler ist vollkommen in der Lage. – StoryTeller
@ tobi303: Das bedeutet, dass ich einfach schreiben kann ac = A (/ ** /) '? –