zoukankan      html  css  js  c++  java
  • 《深度探索C++对象模型》1

    C++对象模型:

     

     

    多重继承模型示意:

     

     

     

    第二章:构造函数 语意学

    基类和派生类:

    Bear yogi;

    ZooAnimal franny=yogi;

    在这里,很容易理解合成的copy构造函数将vptr指向基类的虚函数表,不然不仅造成数据切割(sliced),函数调用也混乱了。

     

    返回值的初始化:

     

    在下述四种情况下必须使用成员初始化列表:

    上面的产生临时string效率很低,修改后可以提高:

    在构造函数中可以使用成员函数来对数据成员进行初始化:

    这是因为(可以在构造函数中使用成员函数的原因):

    简单来说,编译器对成员初始化列表的处理:

     

    第三章:Data语意学

    一个空class对象占1字节:

     影响虚继承类对象大小3因素:

    而在visual C++:

     

    类的静态数据成员,存放在程序的全局data section。

    非静态数据成员:

    将不相干的class凑成一对,并带有继承关系(只要继承不要多态):

    将不相干的class凑成一对,并带有继承关系(只要继承不要多态)容易犯错:

    犯第二个错的原因是编译器需要保留对齐空间,否则复制时出现覆盖:

    单一继承含虚函数对象布局:

    多重继承数据布局:

    虚拟继承数据布局:

    指向数据成员的指针:

  • 相关阅读:
    平衡二叉树
    二叉树的深度
    数字在升序数组中出现的次数
    美国最受雇主欢迎的十大编程语言
    重学数据结构(五、串)
    重学数据结构(四、数组和广义表)
    100个高频Spring面试题
    重学数据结构(三、队列)
    重学数据结构(二、栈)
    Java学习之jackson篇
  • 原文地址:https://www.cnblogs.com/ph829/p/5673705.html
Copyright © 2011-2022 走看看