C++ 我应该在这里使用指针吗?
让我们创建三个类: 类Vector3d:C++ 我应该在这里使用指针吗?,c++,pointers,C++,Pointers,让我们创建三个类: 类Vector3d: class Vector3d{ int a,b,c; } 类面,每个面包含3个向量: class Face{ Vector3d *a, *b, *c; } 和类网格(3d对象):在类网格中,我只能得到面向量,但Vector3d类的大多数对象将在多个面之间共享,因此我希望在网格类中存储Vector3d,在面对象中仅存储指针 class Mesh{ std::vector<Vector3d> points; s
class Vector3d{
int a,b,c;
}
类面,每个面包含3个向量:
class Face{
Vector3d *a, *b, *c;
}
和类网格(3d对象):在类网格中,我只能得到面向量,但Vector3d类的大多数对象将在多个面之间共享,因此我希望在网格类中存储Vector3d,在面对象中仅存储指针
class Mesh{
std::vector<Vector3d> points;
std::vector<Face> faces;
}
类网格{
std::向量点;
向量面;
}
问题是,我不明白什么时候应该删除Face类中的指针,我应该用别的东西来代替它吗
编辑:
3 int只是为了解释我的概念,在最终验证中,Vector3d类中会有更多数据
面
应该存储索引,而不是指针。也就是说,
Face
应该有三个成员:无符号a、b、c代码>
如果添加/删除/调整Vector3d
vector的大小,则索引是安全的。
它还允许您以更方便的方式在面之间共享点
这还意味着您可以将面向量的元素直接复制到图形API缓冲区中(假定类型匹配)。如果您试图节省内存,这真的有必要吗?引入指针会降低代码的执行速度。如果指向点内的三维矢量
,则无需删除指针。因为内存已经由std::vector管理。请注意,调整点
数组的大小可能会使指向该数组的所有指针无效。您可以使用智能指针。搜索唯一\u ptr、共享\u ptr和弱\u ptr以节省内存?尽管这是一个值得关注的问题,但请注意3int
通常需要12个字节,而指针通常需要8个字节。差别并没有那么大。3 int只是用来解释概念。在最终版本中,将有更多的数据存储在这个类@E中。vanPutten@kol智能指针在这里不是一个好的解决方案。没有共享所有权,对于点的唯一所有权,有向量我会使用std::size_t
或std::ptrdiff_t
而不是unsigned
,但你的观点是好的。我个人也会使用size_t
,但大多数图形API只有16位或32位索引(例如D3D11)uint32\u t
或uint16\u t
更适合图形APIs,a、b、c将是std::vector中Vector3d的索引还是什么?谷歌带我去array的tutorial@HeroesVII是的,像这样:Vector3d a=points[faces[i].a]代码>这是唯一的答案,它不仅提供了一个好的解决方案,而且还针对该领域定制了一个解决方案。