条款06 如果不想让编译器自动生成函数, 则需要在自定义的类中明确拒绝
1、C++编译器中, 会自动的, 无偿的,无私的给为我们没有声明的构造函数,析构函数, 复制构造函数, 复制操作符函数声明。
2、当我们想要一份独一无二的对象,这个对象不允许被复制,那么我们就需要在自定义的类中明确的拒绝复制构造函数, 复制操作符函数。
方法一:
将复制构造函数、复制操作符函数声明为private,这样因为我们声明了上述2个函数,编译器就不会帮我们再次声明;
class Test
{
public :
private :
Test(const Test&); //复制构造函数
Test & operator=(const Test &); //复制操作符函数
};
缺点:如果是该类的成员函数或者是友元函数, 还是依旧可以调用这两个复制函数的。 这么不听话, 这么不听话......
方法二:
定义一个只用用来阻止复制函数的基类。
class stopCopy
{
public :
stopCopy();
~stopCopy();
private :
stopCopy(const stopCopy &);
stopCopy & operator=(const stopCopy);
}
class Test : public stopCopy
{
}