类之间的复杂循环依赖性

时间:2015-01-28 19:22:20

标签: c++ c++11

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

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

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

2 个答案:

答案 0 :(得分:4)

您也可以对共享指针使用前向声明,您只需要转发声明析构函数对象。

部首:

struct A;
shared_ptr<A> create_A();

默认地将Impl:

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

答案 1 :(得分:0)

每个类都可以声明一个析构函数,并在源中定义该析构函数,包括由唯一/共享指针销毁的适当类型的头。比标题中的那种类型的简单转发会做到这一点。

#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() {}