При использовании алгоритмов stl для универсальных типов вам необходимо каким-то образом предоставить логику сравнения. Перегрузка оператора не снижает производительность по сравнению с любой другой функцией и может (как и любая другая функция) быть встроенной для удаления любых издержек вызова функции.
Многие стандартные контейнеры и алгоритмы также используют std::less
и, следовательно, по умолчанию <
вместо ==
.
Стандартные контейнеры сами по себе не протекают, но вы можете использовать их для хранения объектов (например, указателей), которые не обязательно очищают память, которую они "владеют".
Трудно утечь память в Java, но это не значит, что вы не можете попасть в неприятности, не имея хорошей семантики владения объектом, и это не значит, что вы не можете использовать всю доступную память авария.