密码管理请下载:

http://a.app.qq.com/o/simple.jsp?pkgname=com.wa505.kf.epassword

1.   关于对象

1.1.  虚表:

1.1.1.       每一个class在编译时期产生一堆指向Virtual函数的指针. 并且放在表格中.[由于虚表定义在与类有关的静态数据区域,因此,一定是在编译时期完成].与此同时,class的RTTI也放入了第一个slot中.

1.2.  指向虚表的指针:

1.2.1.       每一个ClassObject被添加一个指针vptr.这个指针在运行时(构造函数,copy构造函数, 赋值运算符), 被指向对应的虚表, 当然了,这个虚表也包含RTTI信息.

1.3.  C++以以下方法支持多态.

1.3.1.       将一个子类指通过”赋值”操作符,  转换为父类指针.

1.3.2.       通过虚函数机制.

1.3.3.       通过dynamic_cast 和typeid运算符。

2.   构造函数语义学

2.1.    Default Constructor的建构操作

2.1.1.       带有Default Constructor的Member Class Object

2.1.2.       带有Default Constructor的Base Class

2.1.3.       带有Virtual Function 的cass

2.1.4.       带有一个Virtual Base Class 的class

2.2.   Copy Constructor的建构操作

2.2.1.       Bitwise Copy Semantics

2.2.2.       不要Bitwise Copy Semantics!的四种情况与 Default Constructor类似。

2.2.3.       重新设定Virtual Table(不能Bitwise Copy).

2.2.4.       重新处理Virtual Base Class Subobject. 因为在不同的同一继承层次的子类中,vbtr的值是不同的(不能Bitwise Copy).。

2.3程序转换语意学Program Transformation Semantics

2.3.1          明确的初始化操作(Explicit Initialization)。重写定义,并明确调用copy构造

2.3.2          参数的初始化(隐式初始化)。除了初始化之外,还修改函数的签名。(老版本的BorlandC++没有修改)

2.3.3          返回值的初始化(Return Value Initialization).

改写函数签名,改为通过参数来返回。例如foo(A& a)

2.3.4          用者层面做优化(Optimization at the user Level) 使用者通过一些设计来优化代码。例如可以节约一次默认构造。

2.3.5          编译器优化:节约一次copy构造。但是有可能会破坏程序作者的意图,例如,如果基于copy构造做了一些事情,那么就可能会报错。对于直接返回一个值的函数。例如

A foo(){

A a;

a.f();

return a};

首先改造为

Foo(A& a){

a.A::A()

a.f()

a.A::A(a)

}

然后优化掉copy构造(C++标准是允许的)

Foo(A& a){

a.A::A()

a.f()

}

2.3.6          Copy Constructor:要还是不要?

当编译器提供NRV优化时,最好还是提供一个。这样在大量的基于成员的初始化memberwise(与Bitwise相对)时,可以激活NRV。

2.4成员们的初始化队伍(Member Initialization List

2.4.1          初始化一个reference member时

2.4.2          初始化一个constmember时

2.4.3          BaseClass 的构造函数没有默认构造时,需要一组参数。

2.4.4          MemberClass的构造函数没有默认构造时,需要一组参数

2.4.5           另外,初始化的次序由member的生命次序决定,不是由,初始化列表中的次序决定。最好避免在初始化列表中,用一个member为另外一个member设定初值。如果以member来初始化baseclass,那么问题将会更加严重。

Member Initialization List的执行顺序可能会因为插入新的代码而打乱。如果以member来初始化baseclass,或者memberclass。

3.   Data语意学(The Semantics of Data)

4.   Function语意学(The Semantics of Function)

深入探索C++对象模型学习笔记相关推荐

  1. 深入探索C++对象模型学习笔记2

    密码管理请下载: http://a.app.qq.com/o/simple.jsp?pkgname=com.wa505.kf.epassword 1.   关于对象 1.1.  虚表: 1.1.1.  ...

  2. 深度探索C++对象模型 学习笔记 第二章 构造函数语意学

    很多人抱怨说C++背着程序员做了太多事,如: if (cin) { /* ... */ } 为了让cin能转换为真假值,为cin定义一个类型转换运算符operator int(),就可以完成以上工作了 ...

  3. 用matlab代码进行数据探索、数据清洗学习笔记

    目录 1.说明 2.作文目的 3.数据质量分析3个判别方法 3-1.异常值判别 3-1-1.箱型图法 3-1-2.3σ准(原)则(拉依达准则) 3-2.缺失值判别 3-3.不一致的值判别 4.数据清洗 ...

  4. 《神经科学:探索脑》学习笔记(第1章 神经科学导论)

    <神经科学:探索脑>第二版 中文版 学习笔记(合集) https://altli.blog.csdn.net/article/details/106306300 本章主要介绍神经科学的起源 ...

  5. 《神经科学:探索脑》学习笔记(第2章 神经元和神经胶质细胞)

    <神经科学:探索脑>第二版 中文版 学习笔记(合集) https://altli.blog.csdn.net/article/details/106306300 本章主要介绍神经元和神经胶 ...

  6. 《神经科学:探索脑》学习笔记(第5章 突触传递)

    <神经科学:探索脑>第二版 中文版 学习笔记(合集) https://altli.blog.csdn.net/article/details/106306300 本章主要介绍化学突触传递的 ...

  7. 《神经科学:探索脑》学习笔记(第24章 学习和记忆的分子机制)

    <神经科学:探索脑>第二版 中文版 学习笔记(合集) https://altli.blog.csdn.net/article/details/106306300

  8. 《神经科学:探索脑》学习笔记(第3章 静息态的神经元膜)

    <神经科学:探索脑>第二版 中文版 学习笔记(合集) https://altli.blog.csdn.net/article/details/106306300 本章主要介绍静息电位的原理 ...

  9. 《神经科学:探索脑》学习笔记(第9章 眼睛)

    <神经科学:探索脑>第二版 中文版 学习笔记(合集) https://altli.blog.csdn.net/article/details/106306300 本章主要介绍眼睛的解剖结构 ...

最新文章

  1. 基于r-Kernel的LiteOS操作系统
  2. 英雄探长的机器人怎么拼_LOL路人局都畏惧的辅助英雄,新版机器人布里兹上手指南...
  3. python3 多线程_python3多线程知识点总结
  4. xshell-6以及xftp-6家庭版,学校版免费下载(百度云盘)
  5. 【HDOJ】1239 Calling Extraterrestrial Intelligence Again
  6. 读spring源码(一)-ClassPathXmlApplicationContext-初始化
  7. Mac如何快速导出保存Pages文档里的图片
  8. 为什么8位二进制的取值范围是-128~127
  9. ccs 移植创建新工程_CCS-6-新建TMS320F28335工程(可移植)).pdf
  10. ubuntu14.04 安装tensorflow始末
  11. 国内机场代码(IATA)
  12. GRE阅读高频机经原文及答案之鸟叫研究
  13. 无线传感器网络中的MAC协议
  14. 2021大学网课答案搜题公众号
  15. unity tags的坑
  16. 项目记录-手机号码限制频次
  17. python04-集合与字典
  18. 存储过程中is的含义
  19. 使用BDC进行Miro录屏时的公司代码弹窗问题
  20. NVR(网络视频录像机)介绍

热门文章

  1. asp.net 点击查询跳转到查询结果页面_个体户如何办理和查询定期定额业务?
  2. 电厂运维的cis数据_【面向运行人员的电站智能运维管家系统】
  3. python猜数游戏在程序中预设一个_一道Python简单程序结构练习题
  4. excel工具栏隐藏了怎么办_真正的EXCEL隐藏技巧来啦!这5个你都会吗?
  5. ansys的kbc_ansys求解过程
  6. 嗨,你真的懂this吗?
  7. Springboot 启动问题
  8. asp.net core学习笔记
  9. [Unity UGUI]点击和长按组件
  10. 一个简单的synchronized多线程问题、梳理与思考