《深度探索c++对象模型》的思考
Kaycsdner
Nothing is impossible for a willing heart!!!
展开
-
第二章 构造函数语意学 编译器何时合成拷贝构造函数?
首先要清楚位拷贝(浅拷贝)和值拷贝(深拷贝)的区别(参考http://blog.sina.com.cn/s/blog_a2aa00d70101gpvj.html)。位拷贝,及"bitwise copy"是指将一个对象的内存映像按位原封不动的复制给另一个对象,所谓值拷贝就是指,将原对象的值复制一份给新对象。在用"bitwise assignment"时会直接将对象的内存映像复制给另一个对象,这样原创 2015-10-17 22:22:56 · 1183 阅读 · 0 评论 -
第三章 Data语意学
1、关于Data Member的绑定对于memner function的本体分析,会直到整个class的声明都出现了才才开始。因此一个inline member function躯体内的一个data member的绑定操作,会在整个class声明之后原创 2015-10-21 10:32:14 · 441 阅读 · 0 评论 -
第二章 构造函数语意学 成员们的初始化队伍
必须使用成员初始化列表进行初始化的情况:1)初始化一个引用成员变量;2)初始化一个常量成员变量;3)调用基类的构造函数,并且要指定参数;4)调用类类型的成员变量的构造函数,并指定参数;在使用初始化成员列表对成员进行初始化的时候,一定要注意初始化顺序不是由初始化列表的顺序决定的,而是由类中成员变量的声明顺序决定的。所以尽量使用的是constructor体内的member,而不是初原创 2015-10-18 15:52:58 · 439 阅读 · 0 评论 -
第二章 构造函数语意学 编译器何时生成默认构造函数?
从c++语义的角度上来说,如果类没有定义默认的构造函数,编译器会自动生成默认的构造函数。但是类的构造函数的目的是初始化类成员变量,而编译器合成的默认构造函数其实并不会初始化内置类型的数据成员,所以就算编译器提供了默认的构造函数也没有用,满足不了编译器和程序的要求,所以编译器会优化这一过程,不自动生成默认的构造函数。但是,对于以下四种情况,编译器会自动生成默认构造函数:1)如果一个类没有任何构造原创 2015-10-17 21:25:43 · 1243 阅读 · 0 评论 -
第一章 关于对象
Bear = b;ZooAnimal za = b;//引起切割//调用ZooAnimal::rotate()za.rotate();原文中“ 为什么rotate所调用的是ZooAnimal实体而不是Bear实体?此外,如果初始化函数(应用于上述assignment操作发生时)将一个object内容完整拷贝到另一个object中去,为什么za的vptr不指向Bear的vir原创 2015-10-17 16:54:57 · 583 阅读 · 0 评论