Разыменование ptr_vector :: iterator дает вам ссылку.Затем вы можете использовать &, чтобы получить адрес этой ссылки, поэтому vsnap.push_back(&(*it))
должен скомпилироваться.Какую ошибку вы получаете?
Кроме того, обратите внимание, что вы используете неправильно.Старый объект ptr_vector является владельцем объекта, независимо от того, что вы делаете с адресом объекта.Таким образом, с вашим кодом у вас будет два ptr_vectors, владеющих одним и тем же объектом.Тогда они оба попытались бы удалить его, и вы бы потерпели крах.Вы, вероятно, хотите передать право собственности вместо этого:
vsnap.push_back(v.release(it));
Конечно, это удаляет объект из старого вектора перед добавлением его в новый.Если вы хотите, чтобы объект оставался в обоих векторах, вы можете использовать std :: vector или std :: vector>.Другая альтернатива - оставить первый boost :: ptr_vector, но сделать второй std :: vector, который ничего не имеет и просто указывает на объекты в исходном векторе.Тогда вы должны быть осторожны с жизнями.