C++ 对象层次结构——如何管理循环依赖?

标签 c++ dependencies system-calls

我想制作两个类:一个对象和一个 object_manager,但我对它们应该如何看待/包含彼此感到困惑。我听说禁止两个 header 相互包含,如果我的代码依赖项有圆圈那么它是一个糟糕的代码设计,通常它应该像一个层次结构(town->house->furniture 和 furniture 不应该知道关于城镇的存在)。

但这里我有一个 object_manager,它知道并保存所有对象,对象应该可以选择创建新对象,但是他们应该调用 object_manager,这将迫使他们知道它的存在,这将创建一个结构中的圆圈,这是不好的。

这就像一个进程想要通过调用 OS 系统调用来创建一个新进程,因此 OS 和进程相互了解。

有没有一种方法可以让我在正确的代码设计中实现这一点,或者有时它应该很糟糕?

我想也许对象应该有一个特殊的地方来存储它们所有的“系统调用”,object_manager 会不时检查它,但也许有更好的方法。

最佳答案

使用前向声明:

class ObjectManager;

class Object
{
private:
   ObjectManager* m_objManager;
   ....
public:
   ....
};

在 .cpp 文件中,您可以包含 ObjectManager.h 此外,不要创建 ObjectManager,而是创建接口(interface),这将为您提供更多实现 IObjectManager 的抽象。

关于C++ 对象层次结构——如何管理循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7855398/

相关文章:

android - 将Firebase 'dependencies'与Gradle同步

C printf %d 带有前导零的错误值?

linux - 参数类型 : "const char __user *const __user *argv" 的含义是什么

string - 如何在mips程序集中迭代字符串

c++ - 如何检索 RTTI 以外的 C++ 类信息

c++ - vector 中的成员类型是什么意思?

java - 我可以构建并运行我的项目,但我的 IDE 一直显示错误

c++ - 如何判断函数参数是否可以安全删除

c++ - 如何将protobuf枚举作为字符串?

c++ - 因为调用RegOpenKeyEx导致一长串依赖关系正常吗?