【问题标题】:behaviour of the implicit copy constructor / assignment operator隐式复制构造函数/赋值运算符的行为
【发布时间】:2011-02-16 06:48:39
【问题描述】:

我有一个关于 C++ 标准的问题。

假设您有一个带有用户定义的复制构造函数和赋值运算符的基类。派生类使用编译器生成的隐式类。

派生类的拷贝/赋值是否调用用户定义的拷贝构造函数/赋值运算符?还是需要实现调用基类的用户定义版本?

感谢您的帮助。

【问题讨论】:

    标签: c++ constructor copy assignment-operator


    【解决方案1】:

    仅当派生类具有明确定义的运算符函数时。否则调用父类的op函数。否则,调用隐式 C++。

    【讨论】:

      【解决方案2】:

      如果派生类未声明复制构造函数,并且将声明隐式构造函数(12.8/4“复制类对象”) - 即使基类具有用户定义和定义的复制构造函数。如果在这种情况下基类具有用户定义的复制构造函数,则使用该用户定义的复制 ctor (12.8/8) 复制该基类子对象。

      同样适用于复制赋值运算符(12.8/10 和 12.8.13)。

      因此,如果派生类不需要用户定义的复制 ctor 或“自己的东西”的复制赋值运算符,则您不一定需要实现调用基类的用户定义版本。但是,如果派生类确实声明并定义了自己的复制 ctor/复制赋值运算符,那么就基类子对象而言,那些用户定义的实现负责做正确的事情——不再由自动编译。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 2017-01-21
        • 2018-03-09
        相关资源
        最近更新 更多