结构中的向量 - 最佳方法?C++

Sat*_*own 9 c++ struct vector

我试图在我的结构中包含一个向量.

这是我的结构:

struct Region 
{
    bool hasPoly;
    long size1; 
    long size2;
    long size3;
    long size4;
    long size5;
    long size6;
    //Mesh* meshRef; // the mesh with the polygons for this region
    long meshRef;
    std::vector<int> PVS;
} typedef Region;
Run Code Online (Sandbox Code Playgroud)

此声明中的向量是有效还是更有意义地指向向量.在指向矢量的指针的情况下,我是否需要分配新的矢量.我怎么做到这一点?

谢谢!

编辑:问题是它最终导致错误指向xmemory.h,这是MSVC++平台附带的文件.

    void construct(pointer _Ptr, _Ty&& _Val)
        {   // construct object at _Ptr with value _Val
        ::new ((void _FARQ *)_Ptr) _Ty(_STD forward<_Ty>(_Val)); // this is the line
         }
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我将它分配到结构之外并且只是在我使用的函数中,它就不会发生.有任何想法吗?

Sta*_*ked 6

你可以在没有typedef的情况下编写它:

struct Region 
{
    bool hasPoly;
    long size1; 
    long size2;
    long size3;
    long size4;
    long size5;
    long size6;
    long meshRef;
    std::vector<int> PVS;
}; // no typedef required
Run Code Online (Sandbox Code Playgroud)

回答你的问题:

此声明中的向量是否有效

是的.

或者做一个指向矢量的指针会更有意义.

不,可能不是.如果您这样做,则必须为复制行为实现复制构造函数,赋值运算符和析构函数.你会得到同样的结果,但这将是额外的工作,并可能引入错误.

在指向矢量的指针的情况下,我是否需要分配新的矢量.我怎么做到这一点?

您需要实现复制构造函数,复制赋值运算符析构函数:

// Copy constructor
Region(const Region & rhs) :
    hasPoly(rhs.hasPoly),
    // ... copy other members just like hasPoly above, except for PVS below:
    PVS(new std::vector<int>(*rhs.PVS))
{
}

// Copy assignment operator
Region & operator=(const Region & rhs)
{
    if (this != &rhs)
    {
         hasPoly = rhs.hasPoly;
         // ... copy all fields like hasPoly above, except for PVS below:

         delete PVS;
        PVS = new std::vector<int>(*rhs.PVS);
    }
    return *this;
}

// Destructor
Region::~Region()
{
    delete PVS;
}
Run Code Online (Sandbox Code Playgroud)

底线:你的代码很好.您无需更改它.

编辑:修复赋值运算符:检查与此对比并返回*this.


Pup*_*ppy 3

这样做是完全有意义的,并且您在任何方面都不需要new,除非您实际上想要为单独的向量添加别名。此外,您不需要typedef在这里进行任何事情。