, который знает о внутренних ресурсах shared_ptr,
Это должно ответить на ваш вопрос прямо здесь. Чтобы знать о внутренностях, такая коллекция почти наверняка должна быть частью библиотек интеллектуальных указателей boost. К сожалению, такого нет.
Это действительно обратная сторона умных указателей. Я бы порекомендовал использовать структуры данных, которые ограничивают количество внутренних копий. Перераспределение вектора будет болезненным. Возможно, будет полезен deque, который имеет выделение по частям. Имейте также в виду, что векторные реализации имеют тенденцию получать новую память экспоненциально увеличивающимися частями. Таким образом, они не перераспределяют, скажем, каждые 10 элементов. Вместо этого вы могли бы начать с 128 элементов, затем вектор резервирует себя 256, затем поднимается до 512, 1024 и т. Д. Каждый раз, удваивая необходимое.
Если не считать этого, есть метод ptr_vector boost или предварительное распределение структур данных с достаточным пространством для предотвращения внутреннего копирования.