[英]Define member variable as pointer or object
说我有两节课:
“啊”
#include "B.h"
class A
{
public:
unique_ptr<B> b; //store as pointer
B b; //store as object
A() : b(new B())
{
}
};
“波黑”
class B
{
public:
//huge class
void foo() {};
};
我想在main中使用A:
“的main.cpp”
#include "A.h"
int main()
{
unique_ptr<A> a(new A());
a->b->foo();
a->b.foo();
}
问题1:将B用作指针而不是A内的对象时,我将获得任何性能提升吗?
问题2:说我不会在“ Ah”中#include B,但是我会向前声明B:
class B;
然后,在main内部,我无法调用a-> b-> foo(),因为B并未包含在任何地方。 有什么更好的设计,包括我实际使用该功能的“ Ah”中的“ Bh”或包含在“ main.cpp”中的设计? 将其包含在“ Ah”中将违反向前声明实际上未使用的所有内容的规则,但是将其包含在“ main.cpp”中对于使用这些类的程序员来说是糟糕的。 我确实有复杂的类,在这里我想避免任何可能的#include,以避免以后出现混乱。
1)是,一个A
对象会更小,因为它只是一个指向B
而不是围绕一个的副本携带B
2)您可以在A
转发声明B
,只需要在main.cpp
#include "Bh"
。 在现实中(例如在大型程序中),您只需将此标头包含在使用标头而不是main
本身的实际文件中即可。 包括它在您使用的地方,不要害怕包括东西。 显然,将其保留为所需的最小标头数,但不要为了避免包含而变得复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.