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
您如何建议将其整理出来?
答案 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 /别的什么。