Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在类hirachy中传递智能指针_C++_Pointers_Smart Pointers - Fatal编程技术网

C++ 如何在类hirachy中传递智能指针

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; };

所以,我想弄明白,在对象的hirachy中,如何在对象之间传递指针。 我编写的实际程序是一个基于组件的游戏引擎,但我会尽量解决这个问题

我当前的Hirarch看起来是这样的,我有3个类,一个父类,基本上控制所有子对象的生存期,如果它被破坏,其他一切都会发生:

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啊,好吧,但是,
一个中间对象,它控制其子对象的生存期:
实际上不是真的,因为子对象的生存期应该被延长,直到没有其他子对象引用它为止。这个问题对我来说并不清楚。