Скажімо, у мене є два типи об’єктів, A і B. Взаємовідносини між ними багато-до-багатьох, але жоден з них не є власником іншого.
І A, і B випадки повинні знати про зв'язок; це не один спосіб.
Отже, ми можемо це зробити:
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
Моє запитання: де я розміщую функції для створення та руйнування з'єднань?
Чи повинен бути A :: Attach (B), який потім оновлює A :: Bs і B :: Як вектори?
Або це має бути B :: Attach (A), що здається однаково розумним.
Ніхто з них не почуває себе правильно. Якщо я перестану працювати з кодом і повернусь через тиждень, я впевнений, що не зможу згадати, чи варто мені робити A.Attach (B) або B.Attach (A).
Можливо, це має бути така функція:
CreateConnection(A, B);
Але зробити глобальну функцію також здається небажаним, враховуючи, що це функція спеціально для роботи лише з класами A і B.
Інше питання: якщо я часто стикаюся з цією проблемою / вимогою, чи можу я якось прийняти загальне рішення? Можливо, клас TwoWayConnection, з якого я можу отримати або використовувати в межах класів, які поділяють цей тип відносин?
Які є хороші способи впоратися з цією ситуацією ... Я знаю, як виправити ситуацію "багато хто з" D "досить добре, але цей складний складніше.
Редагувати: щоб зробити це більш чітким, це питання не пов’язане з проблемами власності. І A, і B належать ще одному об'єкту Z, а Z опікується всіма питаннями власності. Мене цікавить тільки те, як створити / видалити зв’язки між багатьма та багатьма між A і B.
Pointer
і GestureRecognizer
. Покажчики належать і керуються класом InputManager. GestureRecognizers належать екземплярам віджетів, які перебувають у власності екземпляра Screen, який належить екземпляру програми. Покажчики присвоюються GestureRecognizers, щоб вони могли надсилати їм вихідні вхідні дані, але GestureRecognizers потрібно знати, скільки покажчиків у них зараз пов’язано (розрізняти 1 палець проти 2 жести пальця тощо).