1
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

你会建议如何解决?

4

2 回答 2

0

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

于 2012-11-23T12:38:29.877 回答
0

我假设您的班级 Obj 应该拥有 p 的所有权。为什么不,只需使用带有 RAII 的普通指针(在 Obj(P *p, int i) 中分配 m_p 并在 ~Obj() 中删除它)?

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

于 2012-11-23T12:20:03.173 回答