Я большой поклонник позволить компилятору сделать как можно больше работы для вас. При написании простого класса компилятор может дать вам следующее за «бесплатно»:Почему компиляторы C++ не определяют operator == и operator! =?
- по умолчанию (пусто) Конструктор
- Копию конструктор
- Деструктор
- Оператор присваивания (
operator=
)
Но, похоже, он не может служить вам для сравнения: operator==
или operator!=
. Например:
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
{ }
Есть ли веская причина для этого? Почему выполнение сравнения по каждому члену может быть проблемой? Очевидно, если класс выделяет память, то вы хотите быть осторожным, но для простого класса, безусловно, компилятор мог бы сделать это за вас?
Конечно же, деструктор предоставляется бесплатно. – 2008-10-20 17:28:27