C ++包括vs forward声明策略

时间:2015-07-13 17:51:17

标签: c++ class include forward-declaration

考虑C ++中两个众所周知的经验法则:

  • 尽可能使用自动对象从RAII中受益
  • 在可能的情况下使用前向声明而不是实际包含来减少编译时间和依赖项数

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

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

遵循第一条经验法则我应该保留所有三个自动对象并添加包括:

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

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

时,很多额外的标题都会进入范围

遵循第二条规则我应该执行以下操作:

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

但在这种情况下,我必须自己管理对象的创建/删除,我们知道这通常会导致错误和内存泄漏。

这个问题有解决方案吗?如果可能的话,使用私有实现类是我想要避免的痛苦。

1 个答案:

答案 0 :(得分:3)

(我假设您正在严格讨论D拥有子对象实例的情况)这似乎是主观的,所以有点基于意见的答案:使用自动对象,如果相应的标题是如此之大编译时间明显变长,修复 问题。