我对C ++标准有疑问。
假设您有一个具有用户定义的复制构造函数和赋值运算符的基类。派生类使用编译器生成的隐式类。
派生类的复制/赋值是否会调用用户定义的复制构造函数/赋值运算符?或者您是否需要实现调用基类的用户定义版本?
感谢您的帮助。
答案 0 :(得分:4)
如果派生类没有声明复制构造函数,并且将声明隐式的(12.8 / 4“复制类对象”) - 即使基类具有用户指定和定义的复制构造函数。如果基类在这种情况下具有用户定义的复制构造函数,则使用该用户定义的复制ctor(12.8 / 8)复制该基类子对象。
类似于复制赋值运算符(12.8 / 10和12.8.13)。
因此,如果派生类不需要用户定义的复制ctor或复制赋值运算符来“自己的东西”,那么您不一定需要实现调用基类的用户定义版本。但是,如果派生类确实声明并定义了自己的copy ctor / copy赋值运算符,那么就基类子对象而言,那些用户定义的实现负责做正确的事情 - 不再由编译器自动。
答案 1 :(得分:0)
仅当派生类具有显式定义的运算符函数时。否则,调用父类的op函数。否则,调用隐式C ++。