Je suis un grand fan de laisser le compilateur faire autant de travail pour vous que possible. Lors de l'écriture d'une simple classe, le compilateur peut vous donner la suite de "libre":
- Une valeur par défaut (vide) constructeur
- Un constructeur de copie
- Un destructeur
- Un opérateur d'affectation (
operator=
)
Mais il ne semble pas à vous donner tous les opérateurs de comparaison - comme operator==
ou operator!=
. Par exemple:
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
{ }
Est-il une bonne raison à cela? Pourquoi effectuer un membre par membre comparaison être un problème? Évidemment, si la classe alloue de la mémoire, alors vous voulez être prudent, mais pour une classe simple, sûrement, le compilateur pourrait le faire pour vous?