随机分配给boost :: ptr_vector

时间:2012-11-14 15:05:36

标签: c++ pointers boost vector 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’

但我正在努力理解这个

2 个答案:

答案 0 :(得分:2)

您应该使用ptr_vector<T>::replace代替operator[]operator[]返回T&而不是T*&,因此您只能指定值而不是指针。

另请注意,在下面的代码中未删除new a2 a1A* a1 = new A(); A* a2 = new A(); 时,您会发生内存泄漏:

std::unique_ptr

考虑使用{{1}}。

答案 1 :(得分:0)

另请注意您的程序有错误。索引从0开始,而不是1。