Случайно назначить для boost :: ptr_vector

Я хочу, чтобы случайным образом назначить boost :: ptr_vector. Используя обычный вектор STL, я бы сделал это:

class A{

};

A* a1 = new A();
A* a2 = new A();

vector<A*> normal_vec;
normal_vec.resize(2);
normal_vec[1] = a1;
normal_vec[0] = a2;

Я пытаюсь сделать то же самое с boost :: ptr_vector:

A* a1 = new A();
A* a2 = new A();

ptr_vector<A> boost_vec;
boost_vec.resize(2);

boost_vec[1] = a1;
boost_vec[0] = a2;

Но я получаю следующую ошибку:

no match for ‘operator=’ in ‘v.boost::ptr_vector<A>::<anonymous>.boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::operator[] [with T = A, VoidPtrSeq = std::vector<void*, std::allocator<void*> >, CloneAllocator = boost::heap_clone_allocator, boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::reference = A&, boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::size_type = long unsigned int](1ul) = a1’

Но я изо всех сил пытаюсь понять это

0

Решение

Вы должны использовать ptr_vector<T>::replace вместо operator[], operator[] возвращается T& вместо T*&, таким образом, вы можете назначить только значение, а не указатель.

Также обратите внимание, что у вас есть утечка памяти, когда второй new за a2 броски, a1 не удаляется в коде ниже:

A* a1 = new A();
A* a2 = new A();

Рассмотреть возможность использования std::unique_ptr,

2

Другие решения

Также обратите внимание, что в вашей программе есть ошибка. Индексирование начинается с 0, а не с 1.

0

По вопросам рекламы [email protected]