Если вы сохраняете вектор одинакового размера, вы можете гарантировать это, вызывая reserve()
с максимальным количеством элементов после его объявления или (как вы уже сделали), объявляя его с начальным количеством элементов, каждый из которых имеетзначение элемента по умолчанию.
Если вы удалите или добавите элементы, базовое хранилище может быть перераспределено в любое время.
Поскольку вы используете здесь необработанные указатели, вы можете использовать NULL в качестве флага "пустого элемента", чтобы сохранить инвариант хранилища.Поскольку вы устанавливаете его на 99 изначально, все они будут иметь значение NULL после этого (значение по умолчанию для любого указателя в качестве элемента вектора), и reserve
является избыточным, если вы не планируете расширять список.Опция, которая позволит вам не беспокоиться о векторном хранилище, будет хранить элементы как boost::shared_ptr<Object>
.Тогда любое удаление элемента vector
будет фактически delete
экземпляром Object
, на который ссылаются, если его никто не использует.
boost::shared_ptr<Object> myObject;
std::vector<boost::shared_ptr<Object> > objects(99);
myObject = &objects[4];
objects.clear();
// myObject still valid since Object instance referenced thru shared_ptr