c ++持有指针的对象矢量

时间:2012-11-23 12:17:06

标签: c++ boost stdvector

struct Obj
{
    Obj(P *p, int i): m_p(p), m_info(info) {}
    std::auto_ptr<P> m_p;
    int m_info;
};

std::vector<Obj> objects; // error C2558: struct 'Obj' : no copy constructor available...

我猜这里的问题存在于auto_ptr。每个人都知道将auto_ptr推入容器是件坏事,将持有auto_ptr的人推入容器也是一件坏事。 我没有m_info字段,我会使用boost::ptr_vector<P> objects

您如何建议将其整理出来?

2 个答案:

答案 0 :(得分:0)

我认为你的班级Obj假设取得p的所有权。 为什么不,简单地使用普通指针,使用RAII(在Obj中指定m_p(P * p,int i)并在~Obj()中删除它?

或者您可以轻松创建一个ScopedPointer类,就像那个http://www.boost.org/doc/libs/1_36_0/libs/smart_ptr/scoped_ptr.htm

一样

答案 1 :(得分:0)

您可以自己管理原始指针(在构造函数中分配,在析构函数中释放并实现复制语义 - 符合RAII)或将指针类型从std :: auto_ptr更改为std :: shared_ptr / boost :: shared_ptr /别的什么。