文章目录
若不想使用默认的拷贝构造函数和拷贝赋值运算符,可自定义,将它们声明为private并且不予实现。
class HomeForSale{
public:
...
private:
...
HomeForSale(const HomeForSale&);
HomeForSale& operator=(const HomeForSale&); //只有声明
};
当然你也可以继承一个不允许编译器自动生成这些函数的基类:
class Uncopyable{
protected:
Uncopyable(){}
~Uncopyable(){}
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
//为求阻止HomeForSale对象被拷贝,我们唯一需要做的就是继承Uncopyable:
class HomeForSale:private Uncopyable{ //class不再声明copy构造函数或者copy assign.操作符
...
};
总结——69
为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。