tc == tc1
сравнивает значения указателя. Это «должно» быть *tc == *tc1
, но я не понимаю, почему вы бы изначально динамически размещали.
Автоматическое (стековое) распределение является наиболее предпочтительным, только динамическое распределение, когда вам нужно, чтобы объект был независим от области видимости. (А затем отслеживайте его с помощью автоматически распределенных интеллектуальных указателей, которые будут удалять указатель, когда это необходимо.)
Кроме того, оператор должен быть const
, потому что он не изменяет this
:
// vvvvv
bool operator==(const TestClass& other) const;
Еще лучше - бесплатная функция:
bool operator==(const TestClass& lhs, const TestClass& rhs);
Который мог бы быть другом. (Свободные функции всегда предпочтительны, плюс это позволяет 5 == tc
работать.)