說我有兩類:定義的成員變量的指針或對象
「啊」
#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.cpp」
#include "A.h"
int main()
{
unique_ptr<A> a(new A());
a->b->foo();
a->b.foo();
}
問題1:當存儲和使用B作爲指針而不是A中的對象時,會有什麼性能提升嗎?
問題2:在說「嗯」,我也不會執行#included B,而不是我會向前聲明B:
class B;
然後,主內我便無法稱之爲A-> B- > foo(),因爲B不在任何地方。什麼是更好的設計,包括「A.h」中的「B.h」或將其包含在「main.cpp」中,我在哪裏實際使用該函數?將它包含在「A.h」中會破壞前向規則,聲明所有未實際使用的規則,但將其包含在「main.cpp」中對於使用這些類的程序員來說是非常糟糕的。我真的有複雜的類,我想避免任何可能的#include,以避免以後的混亂。
除非你需要用另一個對象替換'b'(即改變它指向的內容),那麼在這裏可能首選合成。很難說不知道設計的更多細節。 – 2014-12-03 19:51:42