如何使用私有拷贝构造函数和赋值运算符继承不可复制的类将禁止在派生类上使用复制构造函数和赋值运算符?在单独回复时,请考虑以下方案
如果,默认的复制构造函数和赋值运算符是由派生类中的编译器生成的,而不是由程序员添加的
如果,复制构造函数和赋值运算符在程序员的派生类中被定义并声明为公共
如果,复制构造函数和赋值运算符被程序员定义并在派生类中声明为私有
答案 0 :(得分:3)
1)然后任何副本或赋值都将无法编译,因为编译器生成的复制构造函数和赋值运算符需要访问基类的那些。
2)这将是一个程序员错误。您希望您的类不可复制且不可分配,因此您不应提供公共方法。编译器可能会产生警告,但代码会编译。
3)然后,除非friend
函数或类调用,或者在同一类内部调用,否则赋值和复制将导致上述1)中的编译错误。
带回家的消息是你不应该为不可复制的类提供复制构造函数或赋值运算符。让继承机制自己提供必要的限制。
答案 1 :(得分:2)
默认的复制构造函数和赋值运算符由派生类中的编译器生成,而不是由程序员添加
隐式函数将尝试调用基类中的对应函数。这是不可能的,因为它们是基类的私有,所以你会得到一个编译错误。这就是基类的工作方式。
复制构造函数和赋值运算符由程序员
定义并在派生类中声明为public
然后你已经打败了继承基类的目的;您的派生类现在可以通过这些函数进行复制。
复制构造函数和赋值运算符由程序员
定义并在派生类中声明为私有
同样,你已经打败了基类并使你的类可以复制;但仅限于其成员和朋友的职能部门。