我一直在負責移植一些舊代碼,並在這樣做,我想遵循最佳做法,儘可能的,因爲我的前任很遺憾沒有。下面是該問題的一個基本框架,我碰到:兒童在拷貝構造函數初始化列表
class Foo : public CPropertyPage
{
// Constructor
Foo() : CPropertyPage(Foo::ID)
{
pBar = new Bar();
// init other things
}
// Copy Constructor
Foo(const Foo& other) : CPropertPage(other) // C2248 compiler error
{
pBar = new Bar(*other.pBar);
// copy other things
}
}
因爲我讀過它的編寫時new
是在構造函數中使用的類的拷貝構造函數的最佳實踐,這就是我正在努力。我想要做的,是包括CPropertyPage
的拷貝構造函數在Foo
的拷貝構造函數初始化列表,但是這是不允許的,因爲CPropertyPage
是MFC類CObject
,它的拷貝構造函數是私有的孩子。如果我嘗試在Foo
使用的構造函數的構造函數初始化列表,它編譯,但我不知道這是否達到同一端CPropertyPage
的拷貝構造函數(聲明:我是很新的拷貝構造函數和初始化列表) 。
那麼,怎樣才能正確地我寫Foo
的拷貝構造函數?我的方法在某種程度上存在根本上的缺陷嗎?
編輯:嘗試在語法修正,確定CObject
爲MFC類
'公共類Foo'?這不是C++。我懷疑類似於C++的任何語言都需要類定義中的範圍操作符('Foo :: Foo')。 – 2013-03-26 15:59:37
@JoachimPileborg我會冒險猜他從CPP文件複製/粘貼,然後使其內聯對我們的眼睛很好。無論哪種情況,您都可以輕鬆理解他所問的內容。 – 2013-03-26 16:04:49
@ThePhD基本上,是的。語法並不完美,但我認爲這並不妨礙我的要求 – 2013-03-26 16:10:02