深度探索c++对象模型-阅读笔记
2016-07-27 21:32
645 查看
深度探索c++对象模型-阅读笔记
第一章和第三章
1. class object model
class Point的内存分布
2. 虚函数指针vptr的设定和重置都是由class的constructor,destructor和copy assignment自动完成。
3.虚继承情况下,base class不管在继承链中派生多少次,都只会存在一个实体。
4.多继承情况下,有可能产生多个vptr。
5.虚继承情况下,派生类会多产生一个vptr。根据不同策略,可能指向虚基类共享部分或者指向虚基类表(书中第三章 3.4节 p123)
6.指向data member的指针和指向data member选择的指针
7.成员函数和非成员函数有相同的存取效率,是由于将成员函数经过mangling处理,转化为了非成员函数
8.每一个含有virtual函数的class有一个虚函数表,每一个实例或者对象有一个虚函数指针指向虚函数表。(书中第四章 4.1节 p157)
第一章和第三章
1. class object model
class Point的内存分布
2. 虚函数指针vptr的设定和重置都是由class的constructor,destructor和copy assignment自动完成。
class Base; class Drive:public Base; Drive d; Base b = d; //b的vptr不指向Drive的虚函数表
3.虚继承情况下,base class不管在继承链中派生多少次,都只会存在一个实体。
4.多继承情况下,有可能产生多个vptr。
5.虚继承情况下,派生类会多产生一个vptr。根据不同策略,可能指向虚基类共享部分或者指向虚基类表(书中第三章 3.4节 p123)
class Base { public: virtual void func(); } class Drive1:public virtual Base{}; class Drive2:public Base(); //win32下 sizeof(Drive1)大小为8字节 sizeof(Drive2)大小为4字节
6.指向data member的指针和指向data member选择的指针
class A { public: int a; }; //指向data member的指针 int A::*p1=&A::a; //返回类内offset,按字节算 //指向int的指针 A obj; int *p2=&obj.a; //返回内存中真实地址 //返回a obj.a=100; cout<<obj.a<<" "<<obj.*p1<<endl;
7.成员函数和非成员函数有相同的存取效率,是由于将成员函数经过mangling处理,转化为了非成员函数
8.每一个含有virtual函数的class有一个虚函数表,每一个实例或者对象有一个虚函数指针指向虚函数表。(书中第四章 4.1节 p157)
Point pt; pt->func(); //func为virtual函数 //编译器调用形式:(*pt->vptr[2])();或者(pt->vptr[2])();其中vptr为虚函数指针,2为func在虚函数表的索引
相关文章推荐
- c语言指针操作
- Leetcode 73. Set Matrix Zeroes (Medium) (cpp)
- c++重载、覆盖、隐藏
- 由static_cast和dynamic_cast到C++对象占用内存的分析
- stack应用--矩阵乘法次数计算
- 用Mac终端编写,编译C程序的实例
- [kuangbin带你飞]专题十四 数论基础-C - Aladdin and the Flying Carpet
- 简单点,switch-case的结构简单点~ C语言学习(4)
- c++内联函数(inline)使用详解
- Leetcode 229. Majority Element II (Medium) (cpp)
- Flatten Binary Tree to Linked List
- C ++ 虚函数 (转)
- C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
- c++实现图像旋转任意角度
- 趣味100道C语言程序题num six
- c++设计模式之模板模式
- 设计模式之观察者设计模式(C++实现)
- C语言学习
- errno、stderr、perror函数和strerror函数
- c++ 初始化列表