持有指针的对象的 C++ 向量

c++ vector of objects holding pointer

本文关键字:C++ 向量 对象 指针      更新时间:2023-10-16
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

你建议如何整理?

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

我假设你的类 Obj 应该拥有 p 的所有权。为什么不呢,简单地使用一个普通的指针,在 Obj(P *p, int i 中分配m_p)并在 ~Obj() 中删除它?

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