C++中,如果不自定义对象的拷贝构造函数和赋值运算符,编译器会为该类添加默认的拷贝构造函数和赋值运算符,而且都是public。
但是,有时候我们不希望编译器管太多“闲事”,比如,我们定义一个类,不允许进行拷贝,不允许调用拷贝构造函数和赋值运算符,那该怎么办呢?
那么,我们就希望,如果调用的此类的拷贝构造函数或者赋值运算符,编译器能够报错。我们可以采用,把拷贝构造函数和赋值运算符声明为private。这样的话,只要类的成员函数和友元函数不调用他们,外部调用就会在编译期间侦测出错误。
但是,难保类的成员函数和友元函数不调用,因此,可以采用“将成员函数声明为private,而且故意不实现他们”,这样的话,如果调用了他们,编译器也会报错。
当然,如果定义一个基类,把拷贝构造函数和赋值运算符声明为私有,子类以private继承自基类,这样的实现方式会更好。