muduo网络库剖析——noncopyable禁止拷贝构造类与copyable允许拷贝构造类

muduo网络库剖析—— noncopyable禁止拷贝构造类与copyable允许拷贝构造类

  • 前情
    • 从muduo到my_muduo
  • 概要
    • 禁止拷贝构造类
    • 允许拷贝构造类
  • 框架与细节
    • 代码实现
      • 禁止拷贝构造类
      • 允许拷贝构造类
    • 成员
    • 函数
  • 结尾
  • 未完待续,敬请期待……

前情

从muduo到my_muduo

作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精华进行简要实现,这要求我们足够了解muduo库。

做项目 = 模仿 + 修改,不要担心自己学了也不会写怎么办,重要的是积累,学到了这些方法,如果下次在遇到通用需求的时候你能够回想起之前的解决方法就够了。送上一段话!

概要

禁止拷贝构造类

该类目的之一是为了防止程序员误操作,对某一个类进行拷贝构造,而要求该类继承禁止拷贝构造类。这样在进行拷贝构造和赋值的时候都会有相应的报错提示,增强了项目的规范性。

另外,也更好地增强了代码的可读性。比如,在Log类,我们逻辑上只允许一个日志实例,所以它是禁止拷贝的,因此我们需要继承noncopyable,这里没有写继承程度则默认为私有继承。我们也可以很好地感受到代码的可读性。
muduo网络库剖析——noncopyable禁止拷贝构造类与copyable允许拷贝构造类_第1张图片

允许拷贝构造类

既然有禁止拷贝构造类,那么也应该有允许拷贝构造类。对应的,拷贝构造的作用也是增强代码可读性。

框架与细节

代码实现

禁止拷贝构造类

muduo网络库剖析——noncopyable禁止拷贝构造类与copyable允许拷贝构造类_第2张图片
在上图,我们使用c++11运算符delete删除拷贝构造与赋值运算符以构造禁止拷贝构造类。

还要注意,我们是必须要下面的代码的:

protected:
    noncopyable() = default;
    ~noncopyable() = default;

因为要让子类继承,子类如果出现了显性构造函数,那么基类也必须重写构造函数,那么这里使用default表示调用默认的隐式构造函数与析构函数。

允许拷贝构造类

muduo网络库剖析——noncopyable禁止拷贝构造类与copyable允许拷贝构造类_第3张图片
muduo网络库剖析——noncopyable禁止拷贝构造类与copyable允许拷贝构造类_第4张图片
它说对于默认的赋值运算符无效,所以我们其实没必要取default拷贝构造函数与赋值运算符,多次一举。

但还是那句话,我们的构造函数与析构函数必须重写,否则子类继承时如果想要重写构造函数和析构函数会报错。

成员

见上

函数

见上

结尾

以上就是noncopyable禁止拷贝构造类与copyable允许拷贝构造类的相关介绍,以及我在进行项目重写的时候遇到的一些问题,和我自己的一些心得体会。发现写博客真的会记录好多你的成长,而且对于一个好的项目,写博客也是证明你确实有过深度思考,并且在之后面试或者工作时遇到同样的问题能够进行复盘的一种有效的手段。所以,希望uu们也可以像我一样,养成写博客的习惯,逐渐脱离菜鸡队列,向大佬前进!!!加油!!!

也希望我能够完成muduo网络库项目的深度学习与重写,并在功能上能够拓展。也希望在完成这个博客系列之后,能够引导想要学习muduo网络库源码的人,更好地探索这篇美丽繁华的土壤。致敬chenshuo大神!!!

鉴于博主只是一名平平无奇的大三学生,没什么项目经验,所以可能很多东西有所疏漏,如果有大神发现了,还劳烦您在评论区留言,我会努力尝试解决问题!

未完待续,敬请期待……

你可能感兴趣的:(muduo网络库精解,重构与拓展,开源,网络,服务器,linux,c++,后端,个人开发)