![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深度探索C++对象模型
五山小新新
希望每天6点下班,然后逛超市,买水果,买牛奶,看美女。
展开
-
第一章 关于对象
之前其实看过深度探索C++对象模型的了。现在只要是重温一遍,把自己的感受记录下来,留着以后能够快速实现查看和温故而知新。原创 2014-08-05 01:53:12 · 725 阅读 · 0 评论 -
第二章构造函数语意学——关于bitwise copy semantics
关于这个问题,第一遍看的时候比较晕,不知道这个什么 bitwise copy是个什么东西,其实很简单,就是 位逐次拷贝(我靠,一句好犀利的废话)。额,具体来说呢,就是对 源类中的成员变量 中的每一位 都逐次 复制到 目标类中。具体的内容接着看。首先让我们看看这个概念是怎么出来的。书中第50页的时候说到:Default constructors 和 copy constructors原创 2014-08-14 10:05:08 · 774 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之构造、析构、拷贝语意学
1、 继承体系下的对象构造过程是怎样的?1> 调用所有的虚基类构造函数,从左到右,由最深到最浅(别忘记虚基类在对象模型中是以独特的方式支持的,不涉及到在对象模型中的偏移量的问题)2> 调用所有的上一层的基类构造函数,以基类的声明顺序为顺序(这是因为一般基类的subobject都会被放在object的开始,并且按基类声明的次序放置)3> 如果class object有原创 2014-08-15 01:11:34 · 669 阅读 · 0 评论 -
C++内存管理详解
程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。原创 2014-08-14 23:53:23 · 420 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之Function语意学
C++支持三种类型的成员函数:static、nonstatic、virtual 1、C++的设计准则中说:非静态成员函数至少必须和一般的非成员函数有相同的效率。这是如何做到的?C++中的member function实际上被转化为nonmember的形式。下面是转化的步骤:1> 改写函数的原型,安插一个额外的参数(this指针)到member function中,使得clas原创 2014-08-14 23:06:10 · 742 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之Data语意学
1、 Data member的布局是怎样的?非静态数据成员1> 在同一个Access Section(也就是private,public,protected等区段)中,较晚出现的数据成员在classobject中有较高的地址。2> 允许编译器将同一类型的多个Acess Section的顺序自由排列,而不必在乎它们的声明次序(但似乎没有编译器这样做)。 静态数据成员原创 2014-08-14 19:47:39 · 699 阅读 · 0 评论 -
Function 语意学之Member 的各种调用方式
1. C++中支持 3中成员函数: static ,非static,和 virtual 函数,两种数据成员,static和非static的2. member的各种调用方式 非static成员函数,在C++中,所有的非 static成员函数都被转化为一个全局的成员函数,并隐式的传给了一个class 的对象的指针,而且选择成员函数的效率与全局函数的效率相同,没有任何负担原创 2014-08-14 23:08:53 · 578 阅读 · 0 评论 -
比较显式调用构造函数和析构函数
1.首先看如下的代码,显式调用析构函数: C++ Code 123456789101112131415161718192021222324252627282930#include using namespace原创 2014-08-15 10:40:17 · 594 阅读 · 1 评论 -
Data语意学之虚继承和虚函数对C++对象内存模型造成的影响(类/对象的大小)
首先重新回顾一下关于类/对象大小的计算原则:类大小计算遵循结构体对齐原则第一个数据成员放在offset为0的位置其它成员对齐至min(sizeof(member),#pragma pack(n)所指定的值)的整数倍。整个结构体也要对齐,结构体总大小对齐至各个min中最大值的整数倍。win32 可选的有1, 2, 4,原创 2014-08-14 19:14:09 · 775 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记之执行期语意学
1、 如何查看objectfiles中定义的函数和全局变量?好吧,其实这个问题确实与执行期语意学有关。因为编译器需要收集每个全局变量的构造和析构函数,而其实现方式也是使用nm命令打印object file的符号表找出特定开头的名称。所以咯,答案是nm命令。(腾讯面试中,我曾遇到这个,当时没答出来T_T) 2、 operator new()、placement new()与new关键原创 2014-08-15 10:33:07 · 828 阅读 · 0 评论 -
构造函数之语意学
1、 一个类是不是一定有构造函数? C++ Annotated ReferenceManual(ARM):构造函数只在需要的时候才会被编译器产生出来。关键字“在需要的时候”,被谁需要?一种是程序需要的时候,一种是变编译器需要的时候。如果程序有需要(如,完成某些非静态数据成员的初始化),那是程序员的责任,程序员需要自己提供构造函数。如果是编译器需要则才会合成出来默认构造函数。编译器不会替程序员原创 2014-08-14 00:49:30 · 559 阅读 · 0 评论 -
快速检验NRV优化测试代码
在读《深度探索C++对象模型》一书时,看到NRV(named return value)优化的说明,觉得很有意思,于是写了一段小的代码,来测试下有NRV优化和无NRV优化有什么区别。测试环境:Win7编译软件: VS2008说明:VS2008上Debug和Release版本已经天然区别开了NRV优化情况。Debug版本无NRV优化,Release版本有NRV原创 2014-08-14 10:22:44 · 734 阅读 · 0 评论 -
第一章 关于对象(二)
如何访问成员?原创 2014-08-12 00:19:38 · 448 阅读 · 0 评论 -
虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图
一、多态多态性是面向对象程序设计的重要特征之一。多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。多态的实现:函数重载运算符重载模板虚函数(1)、静态绑定与动态绑定静态绑定绑定过程出现在编译阶段,在编译期就已确定要调用的函数。动态绑定绑定过程工作在程序运行时执行,在程序运行原创 2014-08-14 20:19:38 · 786 阅读 · 0 评论