boost :: ptr_vector и указатели

0

Я хотел бы сделать что-то вроде этого:

typedef X* X_Pointer;

boost::ptr_vector<X_Pointer> myvec;
X_Pointer x = new X();
myvec.push_back(x);

В том, что я хочу, чтобы на всех моих объектах ссылался указатель, поэтому их конструктор копирования никогда не вызывается, и я также хочу, чтобы ptr_vector контролировал управление памятью, когда весь вектор выходит за пределы области видимости.

Однако компилятор жалуется на последнюю строку. Я думаю, это потому, что я храню X* а не только X

X просто содержит примитивные типы в случае, если кто-нибудь спросит.

Как я могу использовать ptr_vector для хранения X*?

РЕДАКТИРОВАТЬ:

error : no instance of overloaded function "boost::ptr_vector<T, CloneAllocator, Allocator>::push_back [with T=X_Ptr, CloneAllocator=boost::heap_clone_allocator, Allocator=std::allocator<void *>]" matches the argument list

argument types are: (X_Ptr)

object type is: boost::ptr_vector<X_Ptr, boost::heap_clone_allocator, std::allocator<void *>>

myvec.push_back(x);

              ^
Теги:
vector
boost

1 ответ

3

boost :: ptr_vector принимает класс, а не указатель как параметр шаблона. Вы должны создать его таким образом:

boost::ptr_vector<X> myvec; 
  • 0
    Будет ли из-за этого вызываться конструктор копирования?
  • 0
    Копировать конструктор X? Я не вижу никакой причины, почему бы это назвать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню