深入探索C++对象模型
文章平均质量分 76
explore翔
安徽某985小硕,记录日常学习生活,欢迎大家交流指教。
展开
-
data语意学
1、data member布局我们知道,静态成员变量不会放进对象中,而是放在程序的data segment中。只有nonstatic会放在对象之中,并且各个变量不一定连续,比如边界调整的字节就会插入其中。另外,编译器可能会合成vptr,以支持虚函数机制。他一般放在变量后面,但是不同编译器的话,位置也可能在最前面。2、data member存取point3d orgin;point3d *pt=&orgin;orgin.x=0.0;pt->x=0.0;通过这两种方式存取x的成本原创 2021-04-30 16:21:45 · 145 阅读 · 0 评论 -
程序转化语意学
1、明确的初始化操作X x0,下面三个定义中,每一个都是以x0为值初始化其class对象;void foo_bar(){X x1(x0);X x2=x0;X x3=X(x0);}必要的程序转化有两个阶段:1、重写每一个定义,其中的初始化操作被剥除;2、累的复制构造函数调用操作被安插进去;其实真正的foo_bar()函数如下:void foo_bar(){X x1;X x2;X x3;//下面是编译器加的复制构造函数x1.X::X(x0);x2.X::X(x0);x3.原创 2021-04-26 21:01:31 · 116 阅读 · 0 评论 -
构造函数语意学2----复制构造函数的建构操作
有以下三种情况,会以一个对象的内容作为另一个对象的初值。(1)class X{…};X x;X xx=x;//最明显的一种复制操作;(2)extern void foo(X x);void bar(){X xx;foo(xx);//形参实参问题(3)X foo(){X xx;return xx;//作为返回值}复制构造函数和默认构造函数一样,也分为无用的和有用的。那么有无用的标准在于class是否展现出所谓的位逐次拷贝(bitwise copy semantic)如果是位原创 2021-04-24 15:41:24 · 112 阅读 · 0 评论 -
构造函数语意学1----有用的默认构造函数
先学习几个英文单词:implicit隐含的;explicit明确的;trivial没用的;nontrivial有用的;memberwise:对每个成员施以…bitwise对每个bit施以…下面主要学习编译器对于对象构造过程的干涉,以及对于程序形式和效率的影响。1.默认构造函数的建构操作(default constructor)很多人存在一个误解,只要一个类没有声明一个构造函数,那么编译器就会合成一个出来。但其实只有以下四种情况才会合成一个默认构造函数(有用的)。有的人在effective c++原创 2021-04-23 23:01:06 · 155 阅读 · 2 评论 -
认识C++类的对象模型布局
1、理解C和C++的区别在C中,数据和处理数据的方法是分开声明的,没有关联,这就是程序性的方法。二者不仅是风格上的不同,封装性多态性等的存在会使c++更具威力。虽然使用起来更复杂一些。2、加上封装的成本很多人会觉得c++加上封装成为类之后,会增加很多成本。但其实并不会这样,因为类中声明的成员函数不会出现在对象实体中,每个成员函数只有一个函数实体。(内联函数除外)C++在布局和存取时间上的负担主要产生在以下两个方面:1、虚函数机制,用于实现多态,运行期绑定;2、虚基类。用于实现多次出现在继承体系中原创 2021-04-22 21:55:04 · 144 阅读 · 0 评论