Итак, я пытаюсь выяснить, как передавать указатели между объектами в иерархии объектов. Реальная программа, которую я пишу, - это игровой движок, основанный на компонентах, но я постараюсь разобрать проблему настолько, насколько это возможно.
Моя текущая иерархия выглядит следующим образом, у меня есть 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, что выглядит довольно грязно.
Теперь я спрашиваю, есть ли какое-нибудь лучшее решениея пропустил.