
C++对象模型
文章平均质量分 91
ljianhui
热爱编程,热爱学习IT技术
展开
-
C++对象模型之默认构造函数的构造操作
一个类,如果没有任何的用户声明的的构造函数,那么会有一个默认的构造函数被隐式地声明出来。这个被隐式声明的构造函数,究竟什么时候被合成、被编译器合成的默认构造函数究竟执行怎么样的操作,编译器如何处理用户定义的构造函数,就是本文要探讨的问题。 1、默认构造函数何时被合成 如果一个类没有任何的用户声明的构造函数,那么在当编译器需要的时候,编译器会为类合成一个默认的构造函数,它只用于执行编译器所需要原创 2015-05-30 01:13:15 · 3101 阅读 · 2 评论 -
C++对象模型之复制构造函数的构造操作
复制构造函数用于根据一个已有的对象来构造一个新的对象。1、构造函数何时被调用有三种情况会以一个对象的内容作为另一个类的对象的初值构造一个对象,分别是:1)对一个对象做显示的初始化操作时,如class X { ... };X x;X xx = x; // 或 X xx(x);2)当对象被当作参数传递给某个函数时3)当函数返回一个类的对象时2、默认的成员复制初始化如果class没有提供一个显式的复制构原创 2015-06-01 02:16:18 · 2361 阅读 · 5 评论 -
C++对象模型之编译器如何处理函数返回一个对象
1、与经验不符的输出我们知道,当发生以下三种情况之一时,对象对应的类的复制构造函数将会被调用:1)对一个对象做显示的初始化操作时2)当对象被当作参数传递给某个函数时3)当函数返回一个类的对象时所以,当我们设计一下函数(普通或成员函数)时,经验告诉我们,出于效率的考虑,应该尽可能返回一个对象的指针或引用,而不是直接返回一个对象。因为在直接返回一个对象可能会引起对象的复制构造过程,这意味着会发生一定量原创 2015-06-02 00:06:07 · 3352 阅读 · 3 评论 -
C++对象模型之详述C++对象的内存布局
本文主要讨论继承对于对象的内存分布的影响,包括:继承后类的对象的成员的布局、继承对于虚函数表的影响、virtual函数机制如何实现、运行时类型识别等。由于在C++中继承的关系比较复杂,所以本文会讨论如下的继承情况:1)单一继承2)多重继承3)重复继承4)单一虚拟继承5)钻石型虚拟继承原创 2015-06-08 10:16:48 · 12268 阅读 · 7 评论 -
C++对象模型之RTTI的实现原理
RTTI是Runtime Type Identification的缩写,意思是运行时类型识别。C++引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。但是现在RTTI的类型识别已经不限于此了,它还能通过typeid操作符识别出所有的基本类型(int,指针等)的变量对应的类型。C++通过以下的两个操作提供RTTI:(1)typeid运算符,该运算符返回其表原创 2015-06-14 03:11:19 · 24028 阅读 · 13 评论 -
C++对象模型之简述C++对象的内存布局
在C++中,有两种类的成员变量:static和非static,有三种成员函数:static、非static和virtual。那么,它们如何影响C++的对象在内存中的分布呢? 当存在继承的情况下,其内存分布又是如何呢? 下面就一个非常简单的类,通过逐渐向其中加入各种成员,来逐一分析上述两种成员变量及三种成员函数对类的对象的内存分布的影响。 注:以下的代码的测试结果均是基于Ubuntu 14.0原创 2015-05-22 02:28:26 · 16571 阅读 · 10 评论