C++ 包含 vs 前向声明策略

C++ include vs forward declaration strategy

考虑 C++ 中的两个 well-known 经验法则:

假设我在 C++ 中有以下 class:

class D {
  // some methods
  A a; B b; C c;
};

根据第一条经验法则,我应该保持所有三个自动 objects 并添加包括:

#include <A.h>
#include <B.h>
#include <C.h>
class D {
  // some methods
  A a; B b; C c;
};

因此我增加了编译时间,因为当我包含 D.h

时,很多额外的 headers 进入范围

根据第二条规则,我应该执行以下操作:

class A; class B; class C;
class D {
  // some methods
  A *a; B *b; C *c;
};

但在这种情况下,我必须自己管理 creation/deletion 个 objects,我们知道这经常会导致错误和内存泄漏。

这个问题有解决办法吗?如果可能的话,我想避免使用私有实现 classes 是一种痛苦。

(我假设你是在严格谈论 D 拥有 child object 个实例的情况)这似乎是主观的,所以有点 opinion-based 答案: 使用自动 objects 并且如果相应的 headers 太大以至于编译时间明显变长,修复 that 问题。