【网络编程】muduo库——noncopyable

在研读muduo库源码时,可以发现其中的很多类都是私有继承自noncopyable的

那么这是一个什么类呢?为什么要继承这个类?

其实从名字也可以得知 noncopyable——不可复制

让我们看一下源码

#ifndef MUDUO_BASE_NONCOPYABLE_H
#define MUDUO_BASE_NONCOPYABLE_H

namespace 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 之后,派生类对象可以正常地构造和析构

但是派生类对象无法进行拷贝构造和赋值操作

继承自这个类的子类,都直接拥有了禁止拷贝的功能,而不用在自身的类中再一个个单独禁用拷贝。可以说 这是一个极为巧妙的设计。

 

你可能感兴趣的:(网络编程,c++)