2013-03-26 133 views
0

我一直在負責移植一些舊代碼,並在這樣做,我想遵循最佳做法,儘可能的,因爲我的前任很遺憾沒有。下面是該問題的一個基本框架,我碰到:兒童在拷貝構造函數初始化列表

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類

+4

'公共類Foo'?這不是C++。我懷疑類似於C++的任何語言都需要類定義中的範圍操作符('Foo :: Foo')。 – 2013-03-26 15:59:37

+0

@JoachimPileborg我會冒險猜他從CPP文件複製/粘貼,然後使其內聯對我們的眼睛很好。無論哪種情況,您都可以輕鬆理解他所問的內容。 – 2013-03-26 16:04:49

+0

@ThePhD基本上,是的。語法並不完美,但我認爲這並不妨礙我的要求 – 2013-03-26 16:10:02

回答

1

下面是一個MSDN鏈接關於這個問題:

http://msdn.microsoft.com/en-us/library/ccb3dh5c.aspx

原來我的靜態分析工具,當時正在一點點過分熱心在初始化器列表中檢查基類。

+0

澄清這一點:不需要採取任何行動,因爲'CPropertyPage'已禁用複製,這將禁止複製任何派生類,除非您確實提供了複製構造函數。 – 2014-10-19 20:55:32