如何在类 Hirarchy 中传递智能指针

How to pass smart pointers in a class Hirarchy

本文关键字:智能 指针 Hirarchy      更新时间:2023-10-16

所以,我试图弄清楚,如何在对象 Hirarchy 中的对象之间传递指针。 实际的程序im编写是基于组件的游戏引擎,但我会尝试尽可能分解问题。

我当前的 Hirarchy 看起来像这样,我有 3 个类,一个父类,基本上控制所有子对象的生命周期,如果它被破坏,其他一切都会随之而来:

Parent.h:
class Parent
{
private:
std::vector<std::shared_ptr<Object>> objects;
};

中间对象,用于控制其子对象的生存期:

Object.h:
class Object
{
public:
Parent* parent;
private:
std::vector<std::shared_ptr<Child>> childObjects;
};

和一个子对象:

Child.h:
class Child
{
public:
std::weak_ptr<Object> parent;
};

现在的问题是,Child 对象需要对其父对象的引用,但拥有 Childs 父对象的所有共享指针都位于全局父对象中,仅从指向 Childs Parent 的指针创建弱指针将不起作用。

我想出了两个解决方案,要么将一个普通指针传递给 Child,要么让子级遍历到全局父级并在那里获取弱指针,这需要在向量中找到指向子级父级的指针,并且可能并不总是可行的。

我的另一个解决方案是将一个弱指针传递给子父构造函数,并将一个弱指针存储在子父构造函数中,这看起来确实有点混乱。

我现在问是否有我错过的更好的解决方案。

谢谢, shared_from_this这正是我想要的。