• c++ 对象的内存布局


      之前介绍过了普通对象比如系统自带的int等对象的对齐方式,在学习类型转换的时候遇到了自定义类型的继承体系中的downcast与upcast.

    于是顺藤摸瓜,摸到了这里.发现还是 陈皓的博客里面写的最早也最易懂.http://blog.csdn.net/haoel/article/details/3081328

      多重继承:

      

      在这个例子中,我找到了upcast是安全的背后原理.

      我们可以看到:

      1)  每个父类都有自己的虚表。

      2)  子类的成员函数被放到了第一个父类的表中。

      3)  内存布局中,其父类布局依次按声明顺序排列。

      4)  每个父类的虚表中的f()函数都被overwrite成了子类的f()。这样做就是为了解决不同的父类类型的指针指向同一个子类实例,而能够调用到实际的函数

      这样用父类指针来调用子类的函数时候,就直接可以在父类的虚表中调用被子类重载的函数了.

      重复继承:

      

      钻石型多重重复虚拟继承  

      这样就有个问题,同样的基类B在D中存在两遍.为了解决这个问题,就需要使用虚继承.

      

      

    class B {……};
    
    class B1 : virtual public B{……};
    
    class B2: virtual public B{……};
    
    class D : public B1, public B2{ …… };

      

  • 相关阅读:
    openstack-1基础环境准备
    ELK补充之Filebeat
    ELK补充之logstash
    ELK
    dubbo
    zokeeper+kafka
    rabbitmq
    jenkins补充-编写自动化脚本实现devops 流水线和回滚等操作
    sonar
    python连接数据库之(连接MySQL)
  • 原文地址:https://www.cnblogs.com/luntai/p/6249974.html
Copyright © 2020-2023  润新知