我有一個只有一個構造函數的類中的對象,這個構造函數接受一個指向由我的類實現的接口的指針。所以,我希望把它初始化列表:我該如何初始化?
: thatObject(this)
但是,這給了我一個警告,我能夠理解爲什麼給出一個指向未構造的類是不是一個好主意。所以問題是,我該怎麼做?我應該這樣做:
: thatObject(NULL)
{
thatObject = TheClass(this);
}
處理這個問題的正確方法是什麼?
感謝
我有一個只有一個構造函數的類中的對象,這個構造函數接受一個指向由我的類實現的接口的指針。所以,我希望把它初始化列表:我該如何初始化?
: thatObject(this)
但是,這給了我一個警告,我能夠理解爲什麼給出一個指向未構造的類是不是一個好主意。所以問題是,我該怎麼做?我應該這樣做:
: thatObject(NULL)
{
thatObject = TheClass(this);
}
處理這個問題的正確方法是什麼?
感謝
如果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
一般來說,它不是必須在父類的指針,孩子是個好主意。如果您需要使用該指針來獲取某些信息或執行某些操作,請在父親中寫入一個虛擬函數,然後在孩子中實現並調用該函數。
如果你真的真的要做到這一點,你認爲自己的方法工作得很好:
: thatObject(NULL)
{
thatObject = TheClass(this);
}