2010-05-06 102 views
2

我有一個關於C++標準的問題。隱式拷貝構造函數/賦值運算符的行爲

假設您有一個帶有用戶定義的拷貝構造函數和賦值運算符的基類。派生類使用由編譯器生成的隱式類。

複製/分配派生類是否調用用戶定義的複製構造函數/賦值運算符?或者你是否需要實現調用基類的用戶定義版本?

謝謝你的幫助。

回答

4

如果派生類沒有聲明覆制構造函數,並且會聲明隱式聲明(12.8/4「複製類對象」) - 即使基類具有用戶已定義和定義的複製構造函數。如果在這種情況下基類具有用戶定義的拷貝構造函數,則使用該用戶定義的拷貝ctor(12.8/8)複製該基類子對象。

同樣對於複製賦值操作符(12.8/10和12.8.13)。

因此,如果派生類不需要用戶定義的副本ctor或「自己的東西」的副本賦值運算符,則不一定需要實現調用基類的用戶定義版本。但是,如果派生類聲明並定義了自己的副本ctor/copy賦值運算符,那麼就基類子對象而言,那些用戶定義的實現負責做正確的事情 - 不再由此處理編譯器自動。

+0

非常感謝。 – 2010-05-06 08:12:47

0

只有派生類具有顯式定義的運算符函數。否則,調用父類的op函數。否則,隱式的C++將被調用。

相關問題