Я хотел бы сделать что-то вроде этого:
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);
^
boost :: ptr_vector принимает класс, а не указатель как параметр шаблона. Вы должны создать его таким образом:
boost::ptr_vector<X> myvec;