【发布时间】:2011-09-08 23:04:12
【问题描述】:
我试图在我的结构中包含一个向量。
这是我的结构:
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;
这个声明中的向量是否有效,或者做一个指向向量的指针是否更有意义。在指向向量的指针的情况下,我是否需要分配一个新向量。我将如何做到这一点?
谢谢!
编辑:问题在于它最终导致指向 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
}
有趣的是,如果我将它分配在结构之外并且只是在我使用的函数中分配它,它就不会发生。有什么想法吗?
【问题讨论】:
-
这是完全有效的。如果你想使用指针,是的,你必须在构造函数中分配向量。
-
我不认为那里需要 typedef,因为您使用的是 C++。
-
@Satchmo:我在 MSVC++ Express 10 中没有收到该错误,代码与您定义的完全一样...
-
这是一个运行时错误:访问冲突写入位置。非常奇怪,因为它仅在向量位于结构中时发生。如果我在实际函数中声明一个向量,效果很好。
-
@Beta:如果他编译正确,那么在构造函数中分配在语义上与非指针成员相同(堆分配部分除外)。而且他仍然必须实施“三巨头”、适当的 RAII 模式等。