有的类对象是独一无二的,不希望有复制函数,又因为如果不声明复制函数会自动生成复制函数,所以要明确拒绝。
两种不同方法
方法一
class HomeForSale:private Uncopyable{
private:
HomeForSale(const HomeForSale &);
HomeForSale &operator=(const HomeForSale &);
};
将默认的复制构造函数和操作符重载函数声明为private。这样类外调用时编译器会报错。
类内的函数或者友元函数调用时,连接器会报错。
方法二
如果在编译器就报错是更好的,可以尝试构造一个uncopy的基类。
class Uncopyable{
protected:
Uncopyable(){}
~Uncopyable(){}
private:
Uncopyable(const Uncopyable &);
Uncopyable& operator = (const Uncopyable&);
};
class HomeForSale:private Uncopyable{};
这时因为是私有继承,是不能调用基类中的构造函数,所以编译时就报错。
下面附上不同继承方式的区别。