我有一個關於C++標準的問題。隱式拷貝構造函數/賦值運算符的行爲
假設您有一個帶有用戶定義的拷貝構造函數和賦值運算符的基類。派生類使用由編譯器生成的隱式類。
複製/分配派生類是否調用用戶定義的複製構造函數/賦值運算符?或者你是否需要實現調用基類的用戶定義版本?
謝謝你的幫助。
我有一個關於C++標準的問題。隱式拷貝構造函數/賦值運算符的行爲
假設您有一個帶有用戶定義的拷貝構造函數和賦值運算符的基類。派生類使用由編譯器生成的隱式類。
複製/分配派生類是否調用用戶定義的複製構造函數/賦值運算符?或者你是否需要實現調用基類的用戶定義版本?
謝謝你的幫助。
如果派生類沒有聲明覆制構造函數,並且會聲明隱式聲明(12.8/4「複製類對象」) - 即使基類具有用戶已定義和定義的複製構造函數。如果在這種情況下基類具有用戶定義的拷貝構造函數,則使用該用戶定義的拷貝ctor(12.8/8)複製該基類子對象。
同樣對於複製賦值操作符(12.8/10和12.8.13)。
因此,如果派生類不需要用戶定義的副本ctor或「自己的東西」的副本賦值運算符,則不一定需要實現調用基類的用戶定義版本。但是,如果派生類聲明並定義了自己的副本ctor/copy賦值運算符,那麼就基類子對象而言,那些用戶定義的實現負責做正確的事情 - 不再由此處理編譯器自動。
只有派生類具有顯式定義的運算符函數。否則,調用父類的op函數。否則,隱式的C++將被調用。
非常感謝。 – 2010-05-06 08:12:47