1. C++11 前 noncopyable
class nocopyable {
protected:
// 1.把构造和析构设置protected权限,子类可以调用,但是外面的类不能调用
nocopyable(){};
~nocopyable(){};
private:
// 2.把拷贝构造和赋值函数做成了private的,子类和外面的类都不能调用
nocopyable(const nocopyable& );
nocopyable& operator=(const nocopyable& );
};
2. C++11 后 noncopyable
利用c++11的关键字:=default, =delete
class noncopyable {
protected:
// 1.把构造和析构设置protected权限,子类可以调用,但是外面的类不能调用
nocopyable() = default; // 编译器对default函数自动生成默认函数体
~nocopyable() = default;
public:
// 2.禁用拷贝构造和赋值函数
noncopyable(const noncopyable&) = delete; // 编译器对delete函数禁用
void operator=(const noncopyable&) = delete;
};