我一般,幾乎不用思考了,使用前向聲明,這樣我就不必包含頭文件。沿着這個例子:替代轉發聲明,當你不想#包括
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // forward declaration
class bar
{
bar();
~bar();
foo* foo_pointer;
};
一些開發人員喜歡用這種方法來避免包含問題。我寧願用它來最大限度地減少廣泛包含層次結構中的開銷,這是物理設計的一個重要部分(特別是對於大型項目)。
然而,在某些情況下,我真的很喜歡來聲明成員爲正常對象的指針,而不是從自動構造/銷燬機制中獲益。這導致前聲明不能再使用的問題,因爲編譯器需要在這種情況下,類定義,如:
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // Not enough given the way we declare "foo_object"..
#include "foo.h" // ..instead this is required
class bar
{
bar();
~bar();
foo foo_object;
};
所以,我會很高興,如果有人知道另一種語言結構,從而可以在這裏使用,這樣我可以聲明「foo_object」,如示例中所示,但不包括其頭部。
問候
/羅伯特
從技術上講,成員對象與引用沒有太大的區別,只要在施工中實例化,所以在那裏沒有任何損失。 :-) – 2008-11-20 16:22:59
成員可以被默認初始化,並在稍後通過例如(完全)設置。 setter方法。你不能爲參考成員做到這一點。 – Pieter 2008-11-20 16:28:54
我想利用自動構建/銷燬機制,因此任何暗示宿主類的構造/析構函數中所需任務的替代方案都不足以滿足我的需求。謝謝。 – sharkin 2008-11-20 16:30:42