在研读muduo库源码时,可以发现其中的很多类都是私有继承自noncopyable的
那么这是一个什么类呢?为什么要继承这个类?
其实从名字也可以得知 noncopyable——不可复制
让我们看一下源码
#ifndef MUDUO_BASE_NONCOPYABLE_H
#define MUDUO_BASE_NONCOPYABLE_Hnamespace muduo
{class noncopyable
{public:noncopyable(const noncopyable&) = delete;void operator=(const noncopyable&) = delete;protected:noncopyable() = default;~noncopyable() = default;
};} // namespace muduo#endif // MUDUO_BASE_NONCOPYABLE_H
其将拷贝构造和拷贝运算符禁止使用了,然后析构和构造函数保持默认
即
继承自 noncopyable 之后,派生类对象可以正常地构造和析构
但是派生类对象无法进行拷贝构造和赋值操作
继承自这个类的子类,都直接拥有了禁止拷贝的功能,而不用在自身的类中再一个个单独禁用拷贝。可以说 这是一个极为巧妙的设计。