考虑两个众所周知的c++经验法则:
- 尽可能使用自动对象以受益于RAII
- 在可能的情况下使用前向声明而不是实际包含来减少编译时间和依赖项的数量
让我们假设在c++中有以下类:
class D {
// some methods
A a; B b; C c;
};
遵循第一条经验法则,我应该保留所有三个自动对象并添加include:
#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;
};
但是在这种情况下,我必须自己管理对象的创建/删除,我们知道这通常会导致错误和内存泄漏。
这个问题有解决办法吗?如果可能的话,我希望避免使用私有实现类。
(我假设您严格谈论的是D
拥有子对象实例的情况)这似乎是主观的,所以有点基于意见的答案:使用自动对象,如果相应的头文件太大以至于编译时间明显变长,则修复问题。