有些时候,每个对象都是独立的,不能有拷贝和赋值操作,则要去掉类中的拷贝构造函数和赋值函数,但是即便自己不写,编译器也会自动生成这两个函数。解决策略是明确声明这两个函数,但是要加上限制。限制策略就是将这两个函数声明为私有函数,并且不能实现。
class Test
{
private:
Test(Test&);
Test& operator= (Test&);
};
这样Test类中的成员函数和友元函数还是可以访问这两个函数,不过在连接期时会产生错误,这样阻止了这两个函数的使用。
可以将连接期错误一直编译期,这样能更早发现错误。这里利用了一个父类:
class Uncopyable
{
protected:
Uncopyable(){};
~Uncopyable() {};
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator= (const Uncopyable&);
};
class Scale : private Uncopyable
{
public:
void get(Scale a, Scale b)
{
//a = b;
//Scale c(b);
}
};
这样在get成员函数里使用这两个函数会直接曝出错误,因为不能访问父类的私有成员函数