我一直在阅读设计模式(GOF),其中提到外观模式消除了循环依赖。
我想知道它们是如何在 C++ 中出现的?
PS:我不是在问我该如何解决它们。
最佳答案
ClassA.h
#ifndef CLASS_A_H
#define CLASS_A_H
#include "ClassB.h" // Contributes To Circular Include
class ClassA {
private:
ClassB* m_pB;
public:
explicit ClassA( ClassB* pB );
}; // ClassA
#endif // CLASS_A_H
A 类.cpp
#include "ClassA.h"
B类.h
#ifndef CLASS_B_H
#define CLASS_B_H
#include "ClassA.h" // Contributes To Circular Include
class ClassB {
public:
ClassB();
void updateA( ClassA* pA );
}; // ClassB
#endif // CLASS_B_H
B类.cpp
#include "ClassB.h"
导致循环依赖的原因是一个类在其自己的头文件中包含另一个类的头文件,而另一个类也包含前一个头文件。如果涉及多个类,但可能不明显但通过包含链完成,也会发生这种情况,例如:
A.h includes B.h : B.h includes C.h : C.h includes D.h : D.h includes A.h
这仍然会创建循环依赖。这就是为什么建议在依赖它们的类的头文件中包含类原型(prototype)或前向声明的原因;然后将这些依赖项包含在需要这些依赖项的类的 cpp 文件中。可能有几种情况您无法避免这种情况,并且包含的 header 必须位于类的 header 中,因此这就是为什么需要注意良好的程序设计的原因。
关于c++ - 循环依赖在 C++ 中是如何发生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679278/