我正在尝试设计一个用C ++设计3D网格的类。 我的想法如下: 3个基类:Point,Polygon,Polyhedron(网格必须处理非常一般的形状) Polygon类包含一个指向Point(顶点)的共享指针的向量,同样,Polyhedron包含2个指向Point和Polygon的共享指针向量。 将Polygon内部的共享指针向量和多面体共享指针的Point 2向量内部包含在内是非常有用的。 这样,每个Point都会知道连接到它的多边形和多面体。
我已经用这种方式实现了这些类(使用enable_shared_from_this
)并且一切都运行良好,但现在我对此有些怀疑。
这种设计是好的设计还是会导致一些问题?通过共享指针连接2个对象是不好的行为?在这种情况下,内存管理如何?
共享指针在连接Polygon-> Point,Polyhedron-> Point和Polyhedron-> Polygon中非常重要,但在另一个方向上则不那么重要。我认为我可能会使用弱指针而不是共享指针,这样Point就不会对Polygon和Polyhedron生活负责。我不想使用标准指针。
我想了解你的意见,非常感谢你!
答案 0 :(得分:1)
std::shared_ptr
图不能包含循环,否则你会有内存泄漏,因为每个对象都会使下一个对象保持活动状态。
用std::weak_ptr
s。
答案 1 :(得分:1)
在两个方向上共享指针意味着你的记忆力不会被释放。 你应该在所有权方向上使用共享指针(你说的那些是重要的)和弱指针。
所有需要的是在存储它们时将共享指针分配给弱指针,并确保在使用弱指针之前检查到期。