Я хотел бы сделать что-то вроде этого:
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;
Других решений пока нет …