Корректность использования взаимных указателей/ссылок на классы

Подскажите, пожалуйста, корректно ли с моей стороны использовать нечто следующее:

class B;

class A {
    B* b;
};

class B {
    A& a;
};

Дело в том, что класс B не может существовать без класса A. То есть на некоторые классы A приходятся классы B. При этом класс B должен знать, кому он принадлежит. У меня есть два варианта решения сей проблемы:

  1. Просто добавить сеттеры и геттеры к текущей логике, что позволит использовать что-то вроде такого: a->getB()->doSomethingInBClass();.
  2. В классе B написать функцию, которая будет перебирать все существующие объекты классов A и определять, какому из этих объектов принадлежит объект класса B.

Но все-таки в глубине души есть какая-то надежда, что существует какой-нибудь шаблон для подобных случаев - просто я не смог его найти...


Ответы (1 шт):

Автор решения: Harry

А так не устроит?

struct B;

struct A {
    A();
    B* b;
};

struct B {
    B(A& a):a(a){};
    A& a;
};

A::A()
{
    b = new B(*this);
}

Т.е. просто передавать классу B ссылку на его владельца-A? Ну, чуть на грани фола :), так как формально до завершения конструктора объекта A вроде как нет, но все будет нормально работать. И ничего не надо перебирать...

Или я неверно понял ваш вопрос?

→ Ссылка