共享指针内的2个对象相互连接

时间:2015-08-11 09:14:36

标签: c++ c++11 shared-ptr weak-ptr

我正在尝试设计一个用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生活负责。我不想使用标准指针。

我想了解你的意见,非常感谢你!

2 个答案:

答案 0 :(得分:1)

std::shared_ptr图不能包含循环,否则你会有内存泄漏,因为每个对象都会使下一个对象保持活动状态。

std::weak_ptr s。

打破周期

答案 1 :(得分:1)

在两个方向上共享指针意味着你的记忆力不会被释放。 你应该在所有权方向上使用共享指针(你说的那些是重要的)和弱指针。

所有需要的是在存储它们时将共享指针分配给弱指针,并确保在使用弱指针之前检查到期。