使用前向声明时,这些类型的类成员需要是指针。对于将所有类成员声明为指针,即使头文件中的头文件已包含在这些类中,您怎么看?这似乎很好一致,没有混淆。C++ - 类成员作为指针,即使它可以作为一个值类型?
0
A
回答
0
这是一个坏主意。指针引入一个间接级别,使事情变得繁琐,不安全(至少如果你不使用智能指针)并且对性能有害。
一般来说,你应该正确地包含头文件,这样你就不会遇到这个问题,除非有其他的原因,为什么你需要使用指针呢(在相互依赖的情况下,有这个需要,所以它是不可避免地使用它们作为成员,因此显然是“好”)。
0
如果您希望forward声明所有内容(也许是因为编译时间缩短)。
也许您应该阅读约Pimpl idiom
。这是你想知道的。
0
假设你有一个A类,像这样:
class A
{
public:
B my_b_member;
};
需要这个类B:
class B
{
public:
int my_integer;
};
当然,A类将需要B的全部定义,至少描述B的构造函数的部分。为什么?当你声明你的A类时,它的一个成员(也就是B)也将被实例化,使用它的默认构造函数(没有参数)。 因此,项目中需要A类的每个类或文件都必须先包含B类定义。
具有A级这样的,而不是一大优势:
class A
{
public:
B* my_b_member;
};
是,你只需要声明一个B级存在,具有:
class B;
在A的定义之前。
,将需要B的整个定义的唯一一个文件是其中将包含B的类实例化的文件,例如:
int main(void)
{
A a;
a.my_b_member = new B;
return 0;
}
所以,这取决于你的项目,你正在努力实现,等等等等什么 我不会说每个班级成员都有为指针,因为必须通过分配它们来实例化您的类包含的每个成员,这意味着这些成员将分配在堆上而不是堆栈上。在某些情况下,你不希望发生这种情况:
当你操纵网络块时,发送指针是不可能的。
请注意,动态创建对象具有性能成本。小的对象,比如struct 2 int,最好保持价值。 – 2013-04-11 13:43:37