Ich bin ein großer Fan davon, den Compiler so viel Arbeit wie möglich für Sie erledigen zu lassen. Wenn Sie eine einfache Klasse schreiben, kann der Compiler Ihnen das Folgende "kostenlos" zur Verfügung stellen:
- Ein (leerer) Standardkonstruktor
- Ein Kopierkonstruktor
- Ein Destruktor
- Ein Zuweisungsoperator (
operator=
)
Aber es scheint keine Vergleichsoperatoren zu geben - wie zum Beispiel operator==
o operator!=
. Zum Beispiel:
class foo
{
public:
std::string str_;
int n_;
};
foo f1; // Works
foo f2(f1); // Works
foo f3;
f3 = f2; // Works
if (f3 == f2) // Fails
{ }
if (f3 != f2) // Fails
{ }
Gibt es dafür einen guten Grund? Warum sollte die Durchführung eines mitgliederbezogenen Vergleichs ein Problem darstellen? Wenn die Klasse Speicher zuweist, sollte man natürlich vorsichtig sein, aber bei einer einfachen Klasse könnte der Compiler dies doch sicher für Sie erledigen?