template<unsigned value>
class Noncopyable_{
protected:
Noncopyable_() = default;// 使用C++ 缺省函数实现
~Noncopyable_() = default;
Noncopyable_(const Noncopyable_& ) = delete;// 重载 拷贝构造函数,禁止使用
Noncopyable_& operator=(const Noncopyable_&)=delete;// 重载 =运算符,禁止使用
};
#define Noncopyable private Noncopyable_<__COUNTER__> // 私有继承,这些运算符
使用示例
class A: Noncopyable
{
public:
A()=default;
~A() = default;
};
class B: Noncopyable
{
public:
B()=default;
~B() = default;
};
class C:A,B
{
public:
C()=default;
~C() = default;
};
int main()
{
C c;
C f = c;// 编译错误,这里基类中重载了这个运算符禁用了
return 0;
}
//这里A,B继承的是不同的基类,因为通过宏分别定义了两个不同的基类。