深度探索C++对象模型之Data语意学读书笔记
来源:互联网 发布:正规淘宝刷平台有哪些 编辑:程序博客网 时间:2024/06/03 20:51
3.4继承与Data Member
只要继承不要多态
测试源码
class Concrete1{public: // ...private: int val; char bit1;};class Concrete2:public Concrete1{public: // ...private: char bit2;};class Concrete3:public Concrete2{public: // ...private: char bit3;};
对于此例子,使用VC++编译,程序运行结果与书中讨论相符,sizeof(Concrete3)为16。使用GCC编译,结果不符,sizeof(Concrete3)为8。
可见,gcc在这里进行了特殊的优化。真正涉及到类似问题,不能轻易下结论,不同编译器可能有所不同。
如果大家知道GCC做了什么样的优化,请给我留言啊。我个人认为两个编译器提供的默认operator=函数可能行为不同。
加上多态
测试源码
#include <iostream> #include <typeinfo> #include <cstdio> using namespace std; class B{ public: virtual void test0(){ cout<<"B test0"<<endl; } virtual ~B(){ cout<<"B dctor"<<endl; } }; class A:public (virtual) B{ public: int id; virtual void test1(){cout<<"test1"<<endl;} virtual void test2(){cout<<"test2"<<endl;} virtual ~A(){cout<<"A dctor"<<endl;} }; int main(){ A a; printf("%p",&A::id); cout<<sizeof(A)<<endl; cout<<typeid(a).name()<<endl; void (***p)() =(void (***)())&a; typedef void (*fun)(); fun fp1=p[0][0]; fp1(); }
1.GCC和VC++均把vptr放置在对象的头部
2.vptr指向的virtual table里有一个slot,用以支持runtime type identification,但GCC和VC++并没有把slot放置在下标为0的位置。
虚继承
VC++使用虚继承对象尺寸增加一个指针大小,使用virtual base class table技术,引入一种新型指针。
GCC引入虚继承对象尺寸并没有增大,猜测有可能使用virtual function table中放置virtual base class的offset技术,复用vptr,赋予vptr和vtbl双重任务。
0 0
- 《深度探索C++对象模型》读书笔记之Data语意学
- 深度探索C++对象模型之Data语意学读书笔记
- 《深度探索C++对象模型》读书笔记之Data语意学
- 深度探索c++对象模型之三 --- Data语意学
- 《深度探索C++对象模型》读书笔记之Function语意学
- 《深度探索C++对象模型》读书笔记之Function语意学
- 【C++】深度探索C++对象模型之Function语意学
- 第3章 Data语意学-《深度探索C++对象模型》读书笔记
- 《深度探索C++对象模型》读书笔记——Data语意学【for_wind】
- 【深度探索C++对象模型读书笔记】【第3章】Data语意学
- 《深度探索C++对象模型》读书笔记第三章:Data语意学
- 深度探索C++对象模型第三章 Data 语意学
- 深度探索C++对象模型第四章 Data 语意学
- 深度探索C++对象模型 Data语意学笔记
- 深度探索C++对象模型 3Data语意学
- 《深度探索C++对象模型》--3 Data语意学
- 深度探索C++对象模型---data语意学
- 《深度探索C++对象模型》:Data语意学
- 基于 MINA 的 TLS/SSL NIO Socket 实现(二)
- Linux源码中的mktime算法解析
- R中data.table与dlyr的使用
- java数据库连接池配置的几种方法
- 解析如何去掉CodeIgniter URL中的index.php
- 深度探索C++对象模型之Data语意学读书笔记
- MongoDB数据表基本操作
- 非IMU模式下一条update语句产生REDO RECORD条数的探究
- Delphi XML的创建问题
- 某一天是当月的第几周,获取当月共有几周,获取某一周是的开始时间和结束时间
- c/c++ 数字转成字符串, 字符串转成数字
- Qt 信号槽 connect
- 《Apache MINA 2.0 用户指南》第一章:入门
- 向ext的form表单元素添加click监听事件