类 之间的复杂循环依赖

Complex Circular Dependency among classes

我有 5 个 classes (A,B,C,D,E),每个都有自己的 class 和头文件。

class A{};
class B
{
  B(A&a);
};
class C
{
  C(B&b);
};
class D:public A
{};
class E:public D
{
   vector<C*> vc;
};

前向声明将不起作用,因为我在每个 classes 中也使用了很多共享指针。

你也可以对共享指针使用前向声明,你只需要前向声明一个析构函数object。

Header:

struct A;
shared_ptr<A> create_A();

实现:

struct A { ... };
struct A_destroyer { void operator()(A *p) { delete p; }  };
shared_ptr<A> create_A() { return shared_ptr<A>(new A(), A_destroyer()); }

每个 class 都可以声明一个析构函数并在源代码中定义该析构函数,包括 header 用于由 unique/shared 指针析构的适当类型。比 header 中那种类型的简单转发更能做到。

#include <memory>

// header B
struct A;
struct B {
    ~B();
    std::shared_ptr<A> a;
};

// header A
struct A {};

// source B
#include "a"
#include "b"
B::~B() {}