为驳回编译器自动提供的机能,可将相应的成员函数:
- 声明为private;
- 并且不予实现
如仅仅只实现了条件一,member函数和friend函数还是可以调用该类函数。
实现方法1:
class A{
public:
...
private:
A(const A&);
A& operator=(const A&);
};
实现方法2:
使用一个Uncopyable基类(将连接期错误移至了编译期)
class Uncopyable{
protected: //允许基类对象构造和析构
Uncopyable(){}
~Uncopyable(){}
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
class A::private Uncopyable{
...//class不再声明copy构造函数或copy赋值操作符
};```