Как передать умные указатели в классе Hirarchy - PullRequest
0 голосов
/ 14 октября 2019

Итак, я пытаюсь выяснить, как передавать указатели между объектами в иерархии объектов. Реальная программа, которую я пишу, - это игровой движок, основанный на компонентах, но я постараюсь разобрать проблему настолько, насколько это возможно.

Моя текущая иерархия выглядит следующим образом, у меня есть 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;
    };

Иa Дочерний объект:

Child.h:

    class Child
    {
    public:

        std::weak_ptr<Object> parent;
    };

Проблема в том, что объекту Child требуется ссылка на его родительский объект, но все общие указатели, которым принадлежит родительский объект Childs, живут в Global Parent и просто создаютслабый указатель от указателя на родительский объект Childs не будет работать.

Я предложил два решения: либо передать простой указатель на Child, а затем переместить дочерний элемент к глобальному родителю и получить слабыйуказатель там, который потребовал бы нахождения указателя на родительский объект childs в векторе и не всегда был бы возможен.

Другое решение, которое у меня есть, - передача слабого указателя на конструктор родительского объекта childs и сохранение слабого указателя на себя в родительском объекте childs, что выглядит довольно грязно.

Теперь я спрашиваю, есть ли какое-нибудь лучшее решениея пропустил.

1 Ответ

0 голосов
/ 14 октября 2019

Спасибо, shared_from_this было именно тем, что я искал.

...