Получить указатель вместо ссылки из boost :: ptr_vector - PullRequest
2 голосов
/ 17 января 2012

Недавно я обнаружил, что boost ptr_vector полезен для управления моей коллекцией объектов, выделенных из кучи.Библиотека коллекции указателей очень хорошая, но, к сожалению, меня удерживает одна вещь.

Другая часть моего кода должна явно указывать на один из моих объектов в ptr_vector (по определенным причинам он не может быть ссылкой).Однако, когда вы получаете доступ к объекту в ptr_vector, вы получаете ссылку T & (даже если вы использовали ptr_vector.push_back (T *)

. Есть ли в любом случае, я могу получить простой указатель из наддува:ptr_vector

Ответы [ 2 ]

9 голосов
/ 17 января 2012

Да,

boost::ptr_vector<int> v;
v.push_back(new int());
int* ptr = &v[0];
3 голосов
/ 17 января 2012

Так же, как вы делаете из обычного вектора: &myvec[index].Конечно, вы сами гарантируете, что указатель не будет использован после того, как объекта больше нет.Если это становится трудным, тогда вы можете рассмотреть возможность перехода на vector<shared_ptr<T> > вместо ptr_vector<T>.

...