深度探索C++对象模型
cyningsun
这个作者很懒,什么都没留下…
展开
-
《深度探索C++对象模型》读书笔记之Function语意学
C++支持三种类型的成员函数:static、nonstatic、virtual 1、C++的设计准则中说:非静态成员函数至少必须和一般的非成员函数有相同的效率。这是如何做到的?C++中的member function实际上被转化为nonmember的形式。下面是转化的步骤:1> 改写函数的原型,安插一个额外的参数(this指针)到member functi原创 2012-11-17 18:29:09 · 1199 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之构造函数语意学
1、 一个类是不是一定有构造函数? C++ Annotated ReferenceManual(ARM):构造函数只在需要的时候才会被编译器产生出来。关键字“在需要的时候”,被谁需要?一种是程序需要的时候,一种是变编译器需要的时候。如果程序有需要(如,完成某些非静态数据成员的初始化),那是程序员的责任,程序员需要自己提供构造函数。如果是编译器需要则才会合成出来默认构造函数。编译器不会替原创 2012-11-17 18:27:10 · 1216 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之执行期语意学
1、 如何查看objectfiles中定义的函数和全局变量?好吧,其实这个问题确实与执行期语意学有关。因为编译器需要收集每个全局变量的构造和析构函数,而其实现方式也是使用nm命令打印object file的符号表找出特定开头的名称。所以咯,答案是nm命令。(腾讯面试中,我曾遇到这个,当时没答出来T_T) 2、 operator new()、placement new原创 2012-11-17 18:35:47 · 1177 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之Data语意学
1、 Data member的布局是怎样的?非静态数据成员1> 在同一个Access Section(也就是private,public,protected等区段)中,较晚出现的数据成员在classobject中有较高的地址。2> 允许编译器将同一类型的多个Acess Section的顺序自由排列,而不必在乎它们的声明次序(但似乎没有编译器这样做)。原创 2012-11-17 18:23:08 · 1226 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之关于对象
1、C与C++有什么不同呢?前者,数据和处理数据的操作分开声明,程序性地使用全局数据。后者,以ADT或class hierarchy的形式将数据和处理数据的函数封装。 2、细看C与C++的区别可能会有一个问题:加上封装后,布局成本与存取成本增加了多少? 后者的布局和存取成本的增加主要有三种情况:virtual function机制:用于支持一个高效率的执行期绑原创 2012-11-17 18:18:05 · 1193 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之构造、析构、拷贝语意学
1、 继承体系下的对象构造过程是怎样的?1> 调用所有的虚基类构造函数,从左到右,由最深到最浅(别忘记虚基类在对象模型中是以独特的方式支持的,不涉及到在对象模型中的偏移量的问题)2> 调用所有的上一层的基类构造函数,以基类的声明顺序为顺序(这是因为一般基类的subobject都会被放在object的开始,并且按基类声明的次序放置)3> 如果class原创 2012-11-17 18:33:08 · 1413 阅读 · 0 评论 -
问答学习《深度探索C++对象模型》系列
经过数次翻看《深度探索C++对象模型》和翻看别人的笔记,还是决定自己动手写一下该本书的笔记。笔记采用问答的方式是因为在UC实习时我的指导老师的影响:你不要为了看书而看书,你要从中学到东西就要带着疑问去学习。于是有了这一系列的笔记,感谢我的指导老师让我明白:生命不息,学习不止。第一章:《深度探索C++对象模型》读书笔记之关于对象第二章:《深度探索C++对象模型》读书笔记之构造函数语意学第原创 2012-11-17 18:50:57 · 1064 阅读 · 0 评论