《深度搜索C++对象模型》完本有感

看了《深度搜索C++对象模型》,做了一些小实验,真正值得注意的,其实只有两个章节。其他的章节太过繁琐,要么就是个人觉得没有意义。
第二章:构造函数语义学
第四章:Function语义学

接下来会
(1)程序员应该如何理解多态、继承、Function语义学之间的关系。
(2)拷贝构造函数在编译器中的使用和转换特征。
(3)C++中move语义对我们的作用。


多态

  • 多态:多种状态
  • 主要用途:经由一个共同的接口来影响类型的封装,这个接口通常被定义在一个抽象的base class中
  • C++支持多态的方法:
    1.隐式的转换操作。
    2.虚函数机制。
    3.dynamic_cast和typeid运算符。

程序员视角

多态分两类,静态多态和动态多态。

  • 静态多态:重载。
  • 动态多态:①位于继承体系之下。②由虚函数机制支持。③使用引用或指针调用该特性。

我们确认了几个条件:虚函数离不开继承,使用多态离不开类的继承。

继承

  • 继承:is-a
  • 主要用途:略
  • 继承的主要方式:
    1.单一继承。
    2.多重继承。
    3.虚继承。

程序员视角

子类继承了父类的特性。

虚函数机制

C++对象模型:

  • class:vtbl
  • object:vptr

程序员视角

问题一、在C++对象模型中,一个类对象,是如何在内存中描述的?

  • 1.数据成员:static、non-static
  • 2.函数成员:static、non-static、virtual

问题二、经过单一继承以后,以上成员是如何描述的?

问题三、经过多重继承以后,以上成员是如何描述的?
核心:指针调整。

问题四、经过虚拟继承以后,以上成员是如何描述的?


拷贝构造函数语义学

  • 使用场景
    1.显式初始化操作。
    2.作为参数传给某个函数。
    3.传回一个object。
    拷贝构造函数的定义 X::X(const X& x);
  • NRV优化
    核心:
    通过修改函数原型,传入引用,实现临时对象的使用。

C++11中move语义

Move语义:逻辑上是移动的,实现资源窃取。
1.与浅拷贝构造函数区别。
move是安全的。
2.如何使用move语义?

  • 右值引用:右值是一个临时对象,令其存在-->右值引用。
  • 使用:当表达式为右值,在C++11中,优先调用Move语义构造。

你可能感兴趣的:(《深度搜索C++对象模型》完本有感)