Стоит ли иметь указатель на элемент std::vector, который еще не существует, но будет создан позже?

У меня есть ситуация, когда объектам необходимо хранить указатели на другие объекты того же типа в том же контейнере. Я буду хранить эти объекты в папке std::vector. Строительство как-то затягивает (по умолчанию строительство невозможно) и было бы очень хорошо знать, где будут храниться остальные объекты, но нет необходимости обращаться к ним. Следовательно, я хотел бы также создать вектор указателей на элементы перед их созданием.

Процедура аналогична этой (мой класс сложнее, чем int):

std::vector<int> v;
v.reserve(10);
std::vector<*int> ptr_v;
for(int i(0); i<10; ++i)
   ptr_v.emplace_back(&v[i]) //[] will not do boundary checks
//now fill v and also use ptr_v

Основной вопрос, если это хорошая идея - даже если я могу гарантировать, что вектор не перераспределяется?


person dani    schedule 11.10.2015    source источник
comment
Некоторые реализации будут выполнять проверки границ, по крайней мере, в режиме отладки. Будучи формально неопределенным поведением, это один из возможных результатов.   -  person Bo Persson    schedule 11.10.2015


Ответы (1)


Начиная с С++ 11 вы можете использовать:

http://en.cppreference.com/w/cpp/container/vector/data

Поэтому я бы сказал, что нет ничего плохого в том, что вы не будете перераспределять данные, если вы не пытаетесь использовать их перед созданием класса в этой памяти.

person lilezek    schedule 11.10.2015