zoukankan      html  css  js  c++  java
  • 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;
        };
    }
    
  • 相关阅读:
    魔兽世界中的一些公式
    T端大灾变版本传送大师(NPC 脚本)
    T端带数据库查询的假人系统
    T端GM上线提示
    T端mysql优化设置
    T端根据玩家职业来显示不同颜色的角色名字的C++代码
    IOS复习-UIButton
    从明天开始认真写博客
    为什么到今天还要坚持写博客
    cocos2d—1—环境安装
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/14692796.html
Copyright © 2011-2022 走看看