我试图在我的结构中包含一个向量.
这是我的结构:
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)
有趣的是,如果我将它分配到结构之外并且只是在我使用的函数中,它就不会发生.有任何想法吗?
你可以在没有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.