C ++包含与前向声明策略[关闭]
Posted
技术标签:
【中文标题】C ++包含与前向声明策略[关闭]【英文标题】:C++ include vs forward declaration strategy [closed] 【发布时间】:2015-07-13 17:51:16 【问题描述】:考虑一下 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;
;
但在这种情况下,我必须自己管理对象的创建/删除,我们知道这通常会导致错误和内存泄漏。
这个问题有解决方案吗?如果可能的话,我希望避免使用私有实现类。
【问题讨论】:
你可以使用 std::unique_ptr a;等等。 您不应该仅仅根据包含/转发声明的便利性来决定如何存储成员变量。您实际上应该考虑您的班级是否应该拥有这些成员,或者只是指向/引用它们。 您可以使用 Unique_ptr 来避免自我内存管理。 boost 给出了这个接口。类似于java中的垃圾收集器。 unique_ptr 将在不再被引用时自行销毁。 好吧,我不知道 stl 托管指针不需要完整的类声明。谢谢! 你应该拼写得更好。您的示例无法编译。 ;-) 【参考方案1】:(我假设您是在严格谈论 D
拥有子对象实例的情况)这似乎是主观的,所以有点基于意见的答案:使用自动对象,如果相应的标头太大以至于编译时间明显变长,修复那个问题。
【讨论】:
以上是关于C ++包含与前向声明策略[关闭]的主要内容,如果未能解决你的问题,请参考以下文章