对于在不同类层次结构中的两个类之间共享相同关键部分对象的问题,我很难找到正确的设计解决方案。
想象:
class IB;
class IA {
public: void method_one();
};
class A : public IA {
IB* m_ib;
};
class IB {
public: void method_two();
};
class B : public IB {
IA* m_ia;
};
现在,对 method_one() 和 method_two() 的调用应该是同步的。我碰巧使用critical_section 对象进行同步,但想知道我应该怎么做。
我设法弄清楚了一些想法:
BAD
critical_section m_cs;
- 创建A 或 B 的合适成员 ( ),以及
a) 从 IA 向下转换到 A(或分别从 IB 到 B),并使用它
b) 使其成为静态,并调用A::m_cs
(orB::m_cs
)更好- 创建额外的单例对象/结构来管理critical_section对象并提供对它的访问:
class CriticalSectionProvider { //(...) public: static critical_section& GetIt() { static critical_section cs; return cs; } }
不幸的是,我对这些都不满意,并认为有人可能有更好的主意。
在这种情况下,如何在两个类之间共享单个关键部分?