随机分配给 boost::p tr_vector



我想随机分配给一个boost::p tr_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::p tr_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’

但我很难理解这一点

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

另请注意,当 a2 的第二个new抛出时,内存泄漏,a1在下面的代码中不会删除:

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

考虑使用 std::unique_ptr

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

相关内容

  • 没有找到相关文章

最新更新