自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 [读书笔记] 深入探索C++对象模型-第六章-执行期语义学(上)

继续整理第六章的内容,关于执行期的一些内容。这一部分是关于对象的构造和析构的。注:以下部分图片来自于原文1. 全局对象C++中全局对象会被放到数据段中,一种可能的全局对象的初始化方法是在程序中最前面(main()函数第一个指令)插入函数__main(),其中生成对所有全局对象的初始化操作,如下图:2. 局部静态对象考虑一下函数:void Point& identit

2016-09-28 22:47:19 410

原创 [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(下)

继续整理第五章剩下的内容,关于析构函数语义的。1. 如果类没有定义析构函数,那么只有类中含有成员对象(或者本类的基类)拥有析构函数的情况下,编译器才会合成一个出来,否则析构函数被视为不要,也就不需要合成。例如,如下类,虽然Point类拥有虚函数:class Point {piblic: Point(float x = 0.0, float y = 0.0); Point

2016-09-26 22:25:58 500

原创 [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(中)

继续整理第五章的内容,关于对象复制的。 对于默认的拷贝赋值操作符,在如下情况下不会表现出按位拷贝(bitwise copy:关于按位拷贝,实际就是不使用拷贝构造函数或者拷贝赋值操作符,这里的不使用是指编译器根本不会产生,而是采用按位拷贝对象数据的方式,若对象中含有指针,此时的指针只是地址级别的浅拷贝,可能会引起内存问题):    a. 当类内带有一个含有拷贝赋值操作符的成员变量时。

2016-09-22 23:43:37 773

原创 [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(上)

继续整理第五章的内容,关于累的三个重要函数:构造函数,析构函数,拷贝构造函数。注:以下部分图片来自原书1. 无继承情况下的对象构造。当类中存在虚函数时,编译器会对该类产生膨胀作用, 例如如下类:class Point {public: Point(float x = 0.0, float y = 0.0) : _x(x), _y(y){} virtua

2016-09-20 00:17:30 778

原创 [读书笔记] 深入探索C++对象模型-第四章-Function语义学(下续)

第四章的最后,补充几点关于内联(inline)函数的:inline函数参数带有副作用,或者是以一个单一的表达式做多重调用,或是inline函数中有多个局部变量,都会产生临时对象,可能会产生大量的扩展码,是程序的大小膨胀,所以inline函数的使用必须要谨慎:1. 对于单一表达式的多重调用:对于如下incline函数:inline Point operator+ (const P

2016-09-18 00:16:47 355

原创 [读书笔记] 深入探索C++对象模型-第四章-Function语义学(下)

继续第四章的内容整理,这一部分也是第四章的最后一部分,是关于成员函数指针的,第三章下的内容整理是关于成员变量指针的,这个则是成员函数指针,二者可以互为参考。1. 非虚成员函数指针(非静态)。取一个非静态成员函数的地址,如果该函数是非虚函数,则得到的是它在内存中的真正地址,但是该地址并不完全,需要绑定与具体的类实例(对象)之上,借助对象的地址(this指针)才可以被调用,例如:一个成员函数指

2016-09-17 22:13:07 471

原创 [读书笔记] 深入探索C++对象模型-第四章-Function语义学(中续)

继续整理函数调用的第三种情况内容,注:以下部分图片来自于原文3. 虚拟继承情况下的虚函数调用: 如下例子,Point3d虚拟继承自Point2d:此时的内存布局如下,注意此时虽然Point3d只有唯一一个基类(最左边的)Point2d,但是它们的布局并不像非虚拟继承的单一继承那样,二者之间不再相符,二者之间的转换也就需要调整this指针,因为此时Point3d中

2016-09-14 23:28:35 391

原创 [读书笔记] 深入探索C++对象模型-第四章-Function语义学(中)

继续整理第四章的内容,注:以下部分图片来自于原文1. 单继承情况下的虚函数调用: 对于多态虚函数的调用(通过基类指针或者引用),例如ptr->z();,需要知道两个信息:    a. ptr所指对象的真实类型,这可以使我们选择正确的z()实体;    b. z()实体位置,以便可以调用它。结合以上的所需信息,需要为每一个多态的类对象身上增加两个成员:    a. 一个字符串

2016-09-13 21:22:01 690

原创 [C++] 关于子类声明与父类同名同类型的成员变量的问题

在编程语言的世界里,继承意味着子类中包含父类所有的一切。那么如果在子类中声明了跟父类名字以及类型都一样的成员变量时会如何处理?这个其实会涉及到C++中所谓的名字mangling的机制,所谓name mangling是指C++中为了区分输入的相同名字的东西,例如函数重载,多个虚表指针,等等,所以当出现前面提到的情况时,实际上编译器会把父类和子类的成员变量mangling化,使其独一无二,例如,如下两

2016-09-11 15:54:49 7656

原创 [读书笔记] 深入探索C++对象模型-第四章-Function语义学(上)

开始整理第四章的内容,关于函数的东西。1. 静态成员函数不可以是const的,原因是因为this指针,详细参考:http://blog.csdn.net/beyongwang/article/details/524036972. 成员函数可以分成几类:a. 非静态成员函数:此类函数会隐含一个this指针传入函数体,举个例子,对于如下函数:float A::non_Static_

2016-09-10 21:43:24 582

原创 [读书笔记] 深入探索C++对象模型-第三章 Data语义学(下)

整理第三章最后的部分内容,关于数据成员指针的,之前竟然没听过类数据成员指针一说,果然路漫漫其修远兮啊。注:以下例子和图片来源于原书。1. 数据成员指针是指指向类数据成员的指针,其内容为对应数据成员在类对象中的偏移量,类型为A::*,例如,如下类:class Point3d { public: virtual ~Point3d(); protected:

2016-09-05 22:27:40 522

原创 [读书笔记] 深入探索C++对象模型-第三章 Data语义学(中)

继续整理第三章的内容(以下部分图片来自于原书):1. 在只有继承没有多态的情况下,子类是的内容就是父类加上子类特有的数据成员,例如,对于如下两个类,Point2d和Point3d,后者公有继承自前者,此时的数据布局如下所示:在某些情况下,把一个类分解成多层,可能会导致类所占用空间的膨胀,例如,如下类,算上对齐操作大小为8 (4 + 1 + 1+1 +(1对齐)):而如果

2016-09-04 23:18:08 615

原创 C++中静态成员函数的常量型问题

这几天看深入探索C++对象模型时,看到一句话:静态成员函数不可以是常量函数,如下代码:class Test { virtual ~Test();public: static void StaTest();};如果StaTest()修改为:static void StaTest() const;VS2015中编译回报错误:'StaTest': modifiers not allowe

2016-09-01 21:47:43 1539

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除