C++ 如何在类hirachy中传递智能指针
所以,我想弄明白,在对象的hirachy中,如何在对象之间传递指针。 我编写的实际程序是一个基于组件的游戏引擎,但我会尽量解决这个问题 我当前的Hirarch看起来是这样的,我有3个类,一个父类,基本上控制所有子对象的生存期,如果它被破坏,其他一切都会发生:C++ 如何在类hirachy中传递智能指针,c++,pointers,smart-pointers,C++,Pointers,Smart Pointers,所以,我想弄明白,在对象的hirachy中,如何在对象之间传递指针。 我编写的实际程序是一个基于组件的游戏引擎,但我会尽量解决这个问题 我当前的Hirarch看起来是这样的,我有3个类,一个父类,基本上控制所有子对象的生存期,如果它被破坏,其他一切都会发生: Parent.h: class Parent { private: std::vector<std::shared_ptr<Object>> objects; };
Parent.h:
class Parent
{
private:
std::vector<std::shared_ptr<Object>> objects;
};
Parent.h:
班级家长
{
私人:
向量对象;
};
中间对象,控制其子对象的生存期:
Object.h:
class Object
{
public:
Parent* parent;
private:
std::vector<std::shared_ptr<Child>> childObjects;
};
Object.h:
类对象
{
公众:
家长*家长;
私人:
std::矢量子对象;
};
和子对象:
Child.h:
class Child
{
public:
std::weak_ptr<Object> parent;
};
Child.h:
班童
{
公众:
std::弱ptr父代;
};
现在的问题是,子对象需要对其父对象的引用,但拥有子对象父对象的所有共享指针都位于全局父对象中,仅从指向子对象父对象的指针创建弱指针将无法工作
我提出了两种解决方案,要么传递一个指向子对象的普通指针,要么让子对象遍历到全局父对象,然后在全局父对象中获取弱指针,这需要在向量中找到指向子对象父对象的指针,这可能并不总是可能的
我的另一个解决方案是将弱指针传递给childs的父构造函数,并在childs的父构造函数中存储指向自身的弱指针,这看起来有点混乱
我现在想知道我是否错过了更好的解决方案。谢谢,
这正是我想要的。如果这些类是子对象的唯一管理器,那么您应该使用
std::unique_ptr
,而不是std::shared_ptr
,然后子对象可以简单地将原始指针指向其父对象,而父对象将始终比它活得长。否则,可能有帮助。@U标记子对象必须具有指向其父对象的弱指针,因为它们可能被位于另一个中间对象下的其他子对象引用,因此可能具有对已破坏的子对象的引用object@ErikSchulze啊,好吧,但是,一个中间对象,它控制其子对象的生存期:
实际上不是真的,因为子对象的生存期应该被延长,直到没有其他子对象引用它为止。这个问题对我来说并不清楚。