我有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;
};
前向声明不起作用,因为我在每个类中都使用了很多共享指针。
答案 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() {}