• muduo 库解析之一:Copyable 和 NonCopyable


    Copyable

    • 是一个标记类。
    • 以此为基类的子类可以拷贝,并且其本身必须是值类型。
    • EBO(Empty Base Class Optimization) 空基类优化。

    源码

    #pragma once
    
    namespace muduo
    {
        //@ tag class,标记类型可拷贝
        //@ EBO (空基类优化)
        //@ 以此为基类的子类必须是值类型的
        class Copyable
        {
        protected:
            Copyable() = default;
            ~Copyable() = default;
        };
    }
    

    EBO

    class Empty
    {};
    
    class A{
    	Empty e;
    	int i;
    };
    
    class B :public Empty{
    	int i;
    };
    
    int main()
    {
    	std::cout << "sizeof(Empty) is: " << sizeof(Empty) << std::endl;  //@ 1
    	std::cout << "sizeof(A) is: " << sizeof(A) << std::endl; //@ 8
    	std::cout << "sizeof(B) is: " << sizeof(B) << std::endl; //@ 4
    	return 0;
    }
    
    • sizeof(Empty) == 1:编译器会给这个空类默默的安插一个 char,用来标识这个类。
    • sizeof(A) == 8:按字节对齐。
    • sizeof(B) == 4:空基类优化。

    空基类只是不包含 non-static 成员变量,但是里面往往还包含有enums、typedefs、static、non-virtual 函数。

    NonCopyable

    • 禁用复制构造函数和赋值运算符,以此为父类的子类,因为父类对象不可拷贝和赋值,则本身也不能拷贝和赋值。

    源码

    #pragma once
    
    namespace muduo
    {
        class NonCopyable
        {
        public:
            NonCopyable(const NonCopyable &) = delete;
            void operator=(const NonCopyable &) = delete;
    
        protected:
            NonCopyable() = default;
            ~NonCopyable() = default;
        };
    }
    
  • 相关阅读:
    Windows上DVWA和sqli-labs部署(Debian&Ubuntu)
    easy -heap
    栈迁移基础
    调试下的plt&got
    Linux 下的文件解压
    GitHub的raw.githubusercontent.com无法链接
    ELF文件认知(二)可重定位目标文件
    自动微信聊天
    MinIE: Open Information Extraction system, GROBID, tet-pdf
    MD5 don't know the problem (Solved)
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/14692796.html
Copyright © 2020-2023  润新知