2011-09-14 143 views
2

我有一個只有一個構造函數的類中的對象,這個構造函數接受一個指向由我的類實現的接口的指針。所以,我希望把它初始化列表:我該如何初始化?

: thatObject(this) 

但是,這給了我一個警告,我能夠理解爲什麼給出一個指向未構造的類是不是一個好主意。所以問題是,我該怎麼做?我應該這樣做:

: thatObject(NULL) 
{ 
    thatObject = TheClass(this); 
} 

處理這個問題的正確方法是什麼?

感謝

回答

2

如果thatObject是保證永遠不會取消引用給定的指針,直到後它的構造是完整的,則忽略或抑制警告。如果你覺得不安全,保證將來永遠不會取消指針,而不是第二種選擇。

在MSVC的代碼,以剿警告是:

#pragma warning(supress:4355) 
: thatObject(this) 

GCC更爲複雜:(和未經考驗的,我沒有GCC)

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Winit-self" 
: thatObject(this) 
#pragma GCC diagnostic pop 
0

一般來說,它不是必須在父類的指針,孩子是個好主意。如果您需要使用該指針來獲取某些信息或執行某些操作,請在父親中寫入一個虛擬函數,然後在孩子中實現並調用該函數。

如果你真的真的要做到這一點,你認爲自己的方法工作得很好:

: thatObject(NULL) 
{ 
    thatObject = TheClass(this); 
} 
相關問題