Я использую 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
?