두 가지 객체 유형 A와 B가 있다고 가정 해 봅시다. 둘 사이의 관계는 다 대다이지만 둘 중 하나는 다른 사람의 소유자가 아닙니다.
A와 B 인스턴스는 모두 연결을 알고 있어야합니다. 한 가지 방법이 아닙니다.
그래서 우리는 이것을 할 수 있습니다 :
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
내 질문은 : 연결을 만들고 파괴하기 위해 함수를 어디에 두어야합니까?
A :: Attach (B) 여야합니까? 그러면 A :: Bs 및 B :: As 벡터가 업데이트됩니까?
아니면 B :: Attach (A) 여야합니다.
그 둘 중 어느 것도 옳지 않다. 코드 작업을 중단하고 일주일 후에 다시 방문하면 A.Attach (B) 또는 B.Attach (A)를 수행해야하는지 기억할 수 없습니다.
아마도 다음과 같은 기능이어야합니다.
CreateConnection(A, B);
그러나 전역 기능을 만드는 것은 클래스 A와 B 만 사용하는 기능이기 때문에 바람직하지 않은 것처럼 보입니다.
또 다른 질문 : 이 문제 / 요구 사항이 자주 발생하면 어떻게 든 일반적인 해결책을 만들 수 있습니까? 아마도이 유형의 관계를 공유하는 클래스에서 파생되거나 사용할 수있는 TwoWayConnection 클래스입니까?
이 상황을 처리하는 좋은 방법은 무엇입니까 ... 일대 다 "C 소유 D"상황을 처리하는 방법을 잘 알고 있지만이 방법은 더 까다 롭습니다.
편집 : 더 명확하게하기 위해이 질문에는 소유권 문제가 없습니다. A와 B는 모두 다른 객체 Z가 소유하며 Z는 모든 소유권 문제를 처리합니다. A와 B 사이의 다 대다 링크를 생성 / 제거하는 방법에만 관심이 있습니다.
Pointer
and GestureRecognizer
입니다. 포인터는 InputManager 클래스가 소유하고 관리합니다. GestureRecognizer는 위젯 인스턴스가 소유하며, 위젯 인스턴스는 App 인스턴스가 소유 한 Screen 인스턴스가 소유합니다. 포인터는 GestureRecognizer에 할당되어 원시 입력 데이터를 공급할 수 있지만 GestureRecognizer는 현재 연관된 몇 개의 포인터를 인식해야합니다 (1 손가락과 2 손가락 제스처 등을 구별하기 위해).