c ++前向声明设计

Aul*_*ulz 6 c++ forward forward-declaration

从我所读到的,我应该尽可能使用前瞻声明.我有这样的类(由于前向声明,每个字段都是指针):

class A
{
    // ...

    A* a;
    B* b;
    C* c;
    D* d;
    E* e;
};
Run Code Online (Sandbox Code Playgroud)

但是存在问题.

1 - 这意味着调用new和delete(或至少与全新智能指针),用于构造每一个领域,而堆栈中分配领域不需要这个.

2-我读过堆栈分配比堆分配快.

3-这也意味着几乎每个类的每个字段都应该是指针.

我是否以正确的方式做我的示例类?或者我错过了有关前瞻性声明的内容?

Luc*_*ore 7

暗示是反过来的 - 你不应该只是为了使用前向声明而使用指针,但是你假设在做出设计决定之后使用前向声明(例如使用指针而不是对象作为成员)您可以.

因此,如果使用对象更有意义,请执行此操作,并包含所需的文件.不要只使用指针,以便可以向前声明类.


Kar*_*dur 6

你所展示的例子是一种矫枉过正.使用前向声明的建议并不意味着您的代码设计是由前向声明实践驱动的.前向声明只是实现细节,设计优先.

首先决定是否需要汇总或组合,然后是否适当的前瞻性声明.

难道喜欢向前声明过#include,当正向声明的类型是你的方法签名的一部分,即一个参数的类型.

#include "OtherClass.h" // 'bad' practice

class OtherClass; // this is better than #include
....
class MyClass
{
    void method(OtherClass *ptr);
}
Run Code Online (Sandbox Code Playgroud)

这无论如何都不是绝对的规则,因为使用前向decls而不是包含并不总是可行/方便.