c++ - 随机分配给 boost::ptr_vector

标签 c++ pointers boost vector ptr-vector

我想随机分配给一个 boost::ptr_vector。使用普通的 STL vector 我会这样做:

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’

但我很难理解这一点

最佳答案

你应该使用 ptr_vector<T>::replace而不是 operator[] . operator[]返回 T&而不是 T*& , 所以你只能赋值而不是指针。

另请注意,当第二个 new 时,您会发生内存泄漏。对于 a2抛出,a1在下面的代码中没有被删除:

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

考虑使用 std::unique_ptr .

关于c++ - 随机分配给 boost::ptr_vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13381406/

相关文章:

c++ - OpenCV 人脸检测返回太多人脸

c++ - 还有其他方法可以为乘法表编写循环以获取运行时值吗?

c - 本地套接字选项集与指向套接字选项集的指针

c - 如何遍历 char ** 变量

c++ - boost::function 指向参数的函数指针?

C++析构函数释放内存

c++ - 如何按取消引用的值对集合进行排序?

c++ - C++ 中的静态全局变量

c++ - 如何使用 boost::bind 绑定(bind)类成员函数?

c++ - 使用 Cygwin + gcc 编译 Boost 示例项目