深度探索C++对象模型第三章 Data 语意学

原创 2002年07月01日 14:20:00

C++ standard 不强制规定“base class  sunjects的排列次序”“不同存取层记得data members的排列次序” ,也不规定“virtual funcitons 和 virtual base class“的实现细节

3.1  Data member 的布局
C++ standard要求:在同一个access section 的member 按次序排列,而各自之间不一定。 VPTR的存放位置也不一定,个个编译器自行规定。

3.3 Data Member的存取
static data member: 只要是static member,那么存取就是一个固定的时间,因为他相当于一个global变量。如果去一个static data member的地址,就会得到一个指向其数据类型的指针,而不是一个指向其class member的指针。因为static member并不包含在一个class object 之中。既然static member放在global data segment之中,就需要对他进行命名处理,防止冲突啊!
Nonstatic data member : 对一个nonstatic data member进行存取操作,编译器需要把class object的手地址加上data member在对象中的偏移量(offset)。origin._x----->  &origin+(&Point3D::x-1) ;  而如果该data member属于一个base class subjects,也一样,因为它的偏移两会在编译期间得到。
虚继承:“经由baseclass subject 存取class members”会增加一层新的间接性。如果是由对象访问base class的数据成员,和上面的时间一样,因为它的偏移量在编译期间已经固定了,而如果是有一个指针来访问,则会很复杂,因为不知道该指针是指向的什么类型阿!可能是base class,也可能是一个derived class,析个额外的间接引用,才能解决。

3.4“继承”和 Data Member
C++中,一个derived class object的空间是自己的members+base class members! 而之间的排列次序载C++  standard中也为强制指定。
虚拟继承的时候:访问virtual base class的成员,则需要通过一个指向该base class的指针,才能访问,而不是像以前一样直接根据计算得到的偏移量得到。所以虚拟继承的效率很差! 高了一倍耶!
指向Members的指针:

【C++】深度探索C++对象模型之执行期语意学

执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。 一、对象的构造和析构 对于类对象的构造,我们应该尽量在需要使用时才进行...
  • zone_programming
  • zone_programming
  • 2015年12月27日 11:10
  • 528

《深度探索c++对象模型》学习笔记

1、c++的布局和存取时间成本?封装并未给c++带来任何的空间或执行期的不良后果,c++在布局和存取时间上的主要额外负担由虚拟化引起。包括: 1)virtual function机制。用以支持一个有...
  • will130
  • will130
  • 2016年05月31日 15:48
  • 286

《深度探索C++对象模型》第三章 Data语意学

首先给出以下例子: class X{}; class Y:public virtual X{}; class Z:public virtual X{}; class A:public Y,publi...
  • m0_37316917
  • m0_37316917
  • 2017年03月10日 23:30
  • 126

深度探索c++对象模型(一)_关于对象

原博客地址:http://www.roading.org//develop/cpp/c对象面面观.html 学习C++应该看过不少关于C与C++的口水贴,以及关于各种对比C与C++效率比较的...
  • A_IIIIIIIII_A
  • A_IIIIIIIII_A
  • 2016年01月04日 11:31
  • 574

[读书笔记] 深入探索C++对象模型-第一章《关于对象》

最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。 下面是...
  • beyongwang
  • beyongwang
  • 2016年08月21日 21:14
  • 652

《深度探索c++对象模型》读书笔记(一)

本文以下内容为深度探索c++对象模型的笔记 深度探索c++对象模型是Stanley B Lippman的著作,对c++进行了较深层次的探讨。于我而言,这本书解答了我多年(半年)的疑惑: 虚函数是怎...
  • cover_s
  • cover_s
  • 2016年08月30日 15:51
  • 594

C++对象模型简介(二)——《深度探索C++对象模型》精简笔记

叁 多重继承 class A { public: A() {} virtual ~A() {} virtual int foo( ) { return val ...
  • yang_yulei
  • yang_yulei
  • 2013年03月30日 23:48
  • 12130

《深入探索C++对象模型》第三章:Data语意学

我们先来看一个问题,关于菱形继承: class top{}; class left:public virtual top{}; class right:public virtual top{}; cl...
  • xufeilong520xu
  • xufeilong520xu
  • 2017年06月23日 17:28
  • 89

深度探索C++对象模型之(八)

================================================ 如果喜欢,请关注:JellyThink | 思想的果冻 更多原创精彩博文,尽在www.jellyt...
  • vipygd
  • vipygd
  • 2013年01月26日 23:20
  • 906

深度探索C++对象模型-Data语意学01

Ex: class X{}; class Y :public virtual X{}; class Z :public virtual X{}; class A :public Y, public Z...
  • u011391629
  • u011391629
  • 2016年12月09日 11:05
  • 288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度探索C++对象模型第三章 Data 语意学
举报原因:
原因补充:

(最多只允许输入30个字)