Sou um grande fã de deixar o compilador trabalhar o máximo possível para você. Ao escrever uma classe simples, o compilador pode fornecer o seguinte de graça:
- Um construtor padrão (vazio)
- Um construtor de cópias
- Um destruidor
- Um operador de atribuição (
operator=
)
Mas isso não parece fornecer operadores de comparação - como operator==
ou operator!=
. Por exemplo:
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
{ }
Existe uma boa razão para isso? Por que realizar uma comparação membro a membro seria um problema? Obviamente, se a classe alocar memória, você gostaria de ter cuidado, mas para uma classe simples, certamente o compilador poderia fazer isso por você?
==
, da mesma forma que existe uma atribuição automática padrão ( =
) sob certas condições. (O argumento sobre ponteiros é inconsistente porque a lógica se aplica a =
e ==
, e não apenas ao segundo).