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

Shared pointer inside 2 objects connecting each other

本文关键字:指针 共享 连接 内部 两个 对象      更新时间:2023-10-16

我正在尝试设计一个类来设计c++中的3D网格。我的想法如下:3个基本类:点,多边形,多面体(网格必须处理非常一般的形状)Polygon类包含一个指向Point(顶点)的共享指针向量,同样,Polyhedron类包含两个指向Point和Polygon的共享指针向量。这将是非常有用的内部多边形共享指针的向量多面体和内部点2向量的共享指针的多面体。这样,每个点都知道与它相连的多边形和多面体。

我已经以这种方式实现了类(使用enable_shared_from_this),并且所有工作都很好,但现在我对此有一些疑问。这个设计是一个好的设计还是可能会导致一些问题?是一个坏的行为有2个对象连接共享指针?在这种情况下内存管理如何?

在Polygon->Point, Polyhedron->Point和Polyhedron->Polygon的连接中,共享指针非常重要,但在其他方向上则不是那么必要。我想我可以使用一个弱指针而不是共享指针,这样点就不会对Polygon和Polyhedron的生命负责。我不喜欢使用标准指针。

我想知道你的意见,非常感谢!

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

std::weak_ptr s打破循环

在两个方向上共享指针意味着内存不会被释放。您应该在所有权方向上使用共享指针(您说的重要指针),而在其他方向上使用弱指针。

所需要做的就是在存储时将共享指针赋值给弱指针,并确保在使用弱指针之前检查过期。