繁体   English   中英

将成员变量定义为指针或对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM