我的頭文件如下所示。現在有關內存優化的問題C++
class A;
class B;
class C;
Class a {
A *a;
B *b;
C *c;
};
,Class a
不使用所有A
,B
,C
和周圍40人。我有大約40個前向聲明...可以優化它的某人..所以,我可以在需要的基礎上聲明指向類的指針,而不是浪費所有指向全部40個奇怪類的內存的內存?
我的頭文件如下所示。現在有關內存優化的問題C++
class A;
class B;
class C;
Class a {
A *a;
B *b;
C *c;
};
,Class a
不使用所有A
,B
,C
和周圍40人。我有大約40個前向聲明...可以優化它的某人..所以,我可以在需要的基礎上聲明指向類的指針,而不是浪費所有指向全部40個奇怪類的內存的內存?
可以使用聯合與類型代碼或升壓::變種
我建議現在,你應該做一個父類,並把兒童所有的A,B,C,等...然後,在類中使用父類的列表,並把它需要的任何子類。但是有這個問題實際上是由於錯誤的面向對象設計。在Java中學習一個系統的OO設計的原則,然後將它們用於C++。
承認你不能返工你的類,並承認使用的是隻有一個的時候,你可以使用一個工會加上一個ID或「動態類型無效*」:
unsigned gen_id()
{ static unsigned id=0; ++id; return id; }
template<class T>
unsigned id_of()
{ static id = gen_id(); return id; }
class a
{
void* m;
unsigned type;
public:
template<class T>
a(T* p) :m(p), type(id_of<T>())
{}
template<class T>
T* get() const
{ return (id_of<T>()==type)? static_cast<T*>(m): nullptr; }
};
您可以訪問數據as
A* pa = my_a.get();
if(pa) { /* what has to be done with A */ }
如果您需要多於一個,請考慮一個擁有a向量的類b。
對於更「規範」的實施,你可以看看boost::any
確實,Boost Variant – sehe
@sehe:好點! –
你可能想看看在你的設計,也許有一類樹與鹼性或抽象'了'類和繼承的孩子,只包含數據需要?或者,如果行爲更依賴於包含的數據,而不是那麼多(或沒有)共同,那麼只是一組單獨的類。 –