Обычно на руках есть итератор, если речь о стандартной библиотеке С++.
Обычно указатель на объект лежит сразу в нескольких совершенно разных контейнерах и перед удалением объекта надо удалить указатели на него из всех них.
Это у вас в шарпах такое обычно
А у нас, как я уже говорил - в контейнерах лежат не указатели, а полноценные объекты. Ну если нужен полиморфизм - то смартпоинтеры
Держать одно и тоже в разных контейнерах, а потом синхронизировать - похоже на какую-то вашу специфику. Хотя иногда такое нужно. В случаях, когда явная синхронизация по удалению не очень удобна я обычно пользуюсь таким подходом: кладу в контейнер слабую ссылку, которая автоматически протухает при удалении объекта. В какой-то удобный момент дохлые ссылки вычищаются из контейнера.
Хм... Интересно. Надо будет посмотреть. А случай с несколькими контейнерами как-то разруливается множественным наследованием?
Случай с несколькими контейнерами никак не разруливается. Разруливается эффективный доступ без итераторов и меньше фрагментируется память.
Считаю это ключевым моментом. Если программисты сами свои шаблонные алгоритмы не пишут, а используют лишь стандартные, то шаблоны в языке получается что и не так уж и нужны, ведь стандартные шаблоны могут быть реализованы на уровне компилятора, ведь на то они и стандартные. Например, почти во всех языках на уровне компилятора поддерживается такой шаблонный контейнер как массив.
Я не говорил, что совсем не пишу свои алгоритмы
Просто они пишутся один раз и надолго. Тот же find/for_each/map у нас используются
не стандартные. Это легковесная обертка над стандартными алгоритмами, которая умеет работать с диапазонами итераторов.