Корректность использования взаимных указателей/ссылок на классы
Подскажите, пожалуйста, корректно ли с моей стороны использовать нечто следующее:
class B;
class A {
B* b;
};
class B {
A& a;
};
Дело в том, что класс B не может существовать без класса A. То есть на некоторые классы A приходятся классы B. При этом класс B должен знать, кому он принадлежит. У меня есть два варианта решения сей проблемы:
- Просто добавить сеттеры и геттеры к текущей логике, что позволит использовать что-то вроде такого:
a->getB()->doSomethingInBClass();. - В классе B написать функцию, которая будет перебирать все существующие объекты классов A и определять, какому из этих объектов принадлежит объект класса B.
Но все-таки в глубине души есть какая-то надежда, что существует какой-нибудь шаблон для подобных случаев - просто я не смог его найти...
Ответы (1 шт):
А так не устроит?
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 вроде как нет, но все будет нормально работать. И ничего не надо перебирать...
Или я неверно понял ваш вопрос?