C++ C++;包含vs向前声明策略
考虑C++中两条众所周知的经验法则:C++ C++;包含vs向前声明策略,c++,class,include,forward-declaration,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 met
- 尽可能使用自动对象以从RAII中获益
- 尽可能使用前向声明而不是实际包含,以减少编译时间和依赖项的数量
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
拥有子对象实例的情况)这似乎是主观的,因此,一个基于观点的答案是:使用自动对象,如果相应的头太大,编译时间明显变长,请修复该问题。您可以使用std::unique\u ptr a;诸如此类。您不应该仅仅根据include/forward声明的便利性来决定如何存储成员变量。实际上,你应该考虑如果你的类应该拥有这些成员,或者简单地指向/引用它们,你可以使用UnQuyQPTR来避免内存管理。boost提供了这个接口。类似于java中的垃圾收集器。unique_ptr在不再被引用时将销毁自身。好吧,我不知道stl托管指针不需要完整的类声明。非常感谢。你应该拼得更好。您的示例无法编译。;-)
class A; class B; class C;
class D {
// some methods
A *a; B *b; C *c;
};