假设我有两个对象类型,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
和GestureRecognizer
。指针由InputManager类拥有和管理。GestureRecognizers由Widget实例拥有,而Widget实例又由Screen实例拥有,而Screen实例则由App实例拥有。指针被分配给GestureRecognizer,以便它们可以向其输入原始输入数据,但是GestureRecognizers需要知道当前与它们关联的指针有多少(以区分1个手指还是2个手指手势等)。