C++ 我应该在这里使用指针吗?

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

让我们创建三个类:

类Vector3d:

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以节省内存?尽管这是一个值得关注的问题,但请注意3
int
通常需要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]这是唯一的答案,它不仅提供了一个好的解决方案,而且还针对该领域定制了一个解决方案。