条款5中讲了编译器会默认为我们定义一些函数,①copy构造函数 ②copy assignment ③析构函数④default构造函数 ,那如果我们不想使用这些函数怎么办?条款5中讲到了,什么情况我们需要自己定义cpoy assignment和copy 构造函数,要是碰到一种情况,我们不希望对象有这些属性,不希望它能够被拷贝,该如何去做?
方法一:将copy构造函数和 copy assignmen 声明为private,不去实现
这样可以成功的阻止调用这两个函数但是这种做法并不是绝对安全的,因为private可以被friend函数访问到,但是你没有去定义这两个函数,当友元函数去调用的时候,在连接的阶段会会发生连接错误
方法二:设计一个专门阻止copying动作的base类
class Uncopyable
{
protected:
Uncopyable(){}
~Uncopyable(){}
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator =(const Uncopyable &);
}
class HomeForSale:private Uncopyable
{
}
这样一来要想调用HomeForSale 的对象的copy assingment和 copy构造函数,首先需要调用base的copy和copy assignment函数,