Я использую std::vector
для хранения массива объектов, на которые ссылаются внешние объекты вектора другими объектами. Я нарисовал схему, чтобы более четко объяснить:Каков наилучший способ узнать, переместил ли std :: vector его массив?
Я хранение объектов, а не указатели по причинам производительности. Эти объекты сортируются по каждому кадру моей игры, поэтому я хочу, чтобы массив обладал хорошими свойствами кеша.
Конечно, когда объекты добавляются к вектору, существует вероятность того, что массив будет повторно удален. В этом случае мои ссылки недействительны и нуждаются в обновлении. Прямо сейчас, чтобы обнаружить переустановить, я использую следующий метод:
size_t old_capacity = v.capacity();
// Do stuff that could change the vector's size
v.push_back(a);
v.push_back(b);
v.push_back(c);
if (old_capacity != v.capacity()) {
update_references();
}
Мои вопросы:
- Это лучший способ обнаружить, что вектор имеет желание пересесть свой массив?
- Должен ли я также проверить на повторное использование после выполнения
pop_back
?
Если вам нужны ссылки на предметы в контейнере, используйте вектор указателей или контейнер на основе узлов. Вероятно, ваш код будет заметно медленнее и будет намного безопаснее. –
Зачем хранить указатели вместо индексов? Профилировали ли вы, что ссылки на индекс - это ваше узкое место? – orlp
Нет причин, по которым вы должны войти в механику 'vector <>'. Возможно, ваш дизайн ошибочен. –