类 之间的复杂循环依赖
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() {}
我有 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() {}