类的多个实例使用另一个类的单个实例

Multiple instances of class using single instance of another class

本文关键字:实例 另一个 单个      更新时间:2023-10-16

我有一个类(类A),在运行时存在许多实例。此类使用另一个处理资源分配的类(类 R)。由于第二个类(类 R)正在为 A 类的所有实例进行资源分配,因此它只能有一个副本。

所以它看起来像这样:

Class P (Parent) 
Class A[64], which are childs of Class P 
Each of these requires access to the single instance of Class R

我想知道最好的解决方案。

  1. 让父级(类 P)实例化类 R 并传递实例到每个类 A 中。 问题:P类不关心R类,没有用处。它不得不管理它。
  2. 全局变量,可能隐藏在命名空间中 问题:任何人都可以然后使用它,它应该仅限于 A 类。
  3. 类 A 中的静态变量,因此类 A 的所有实例都有访问类 R 的同一实例。 问题:静态类变量是邪恶的

还是我没有想到的事情?

让类 R 包含自身的一个实例,即。单例模式。

然后你可以做:

class A
{
R *resource;
public:
A() { resource = R::getInstance(); }
}

从那时起,使用"资源"作为新的类指针,以防万一您以后改变主意的工作方式。

但是,更好、更灵活的是让父级获取实例。例如,在类 P 中:

classA = new A(R::getInstance());

这样,您可以根据需要轻松更改资源类(例如,用于单元测试),但类 P 不管理资源对象。