Как получить адрес ячейки в которую будет добавлен элемент при push_back() c++

У меня есть вектор с объектами пользовательского класса, в который мне нужно добавить элемент. В конструкторе класса B необходимо знать, куда будет помещен этот элемент (нужен адрес соответствующей ячейки b). Есть ли способ его получить?

     std::vector<A> a(2);
     std::vector<B> b;
     b.push_back(B(std::vector<A*> {&a[0], &a[1]}));

Ответы (2 шт):

Автор решения: gbg

Вероятнее всего, тут проблема XY.

Это решение для тех, кто еще не перешел на C++11 и выше. По поводу современного и более красивого решения смотрите другой ответ в этом топике

Нормально получить этот адрес нельзя, так как при вызове push_back() может произойти переаллокация массива и адрес станет негодным. Так что нужно как-то гарантировать, что переаллокации не будет - например, заранее сделать

reserve(a.size()+1); //или +N, если N известно заранее.
auto ofs = a.data()+a.size(); // искомый указатель
→ Ссылка
Автор решения: user7860670

Адрес, куда будет помещен объект B - это this в конструкторе. А чтобы он был именно адресом объекта, создаваемого в векторе, а не адресом временного объекта, следует использовать emplace_back:

::std::vector<B> b;
b.emplace_back(constructor_args);
→ Ссылка