摘要:
一、类虚函数杂谈 0.虚基类中若存在成员变量,应提供可初始化的构造函数或默认参数的构造函数,避免该成员变量无法被初始化到;当然若不是出于公共部分剥离到父类,则可以将其下层到子类中去,避免基类增加不必要的构造函数。 1.建议不要把基类中的虚析构函数置为存虚的。 2.不必要把子类基本不会覆写的函数设置为虚函数,也不应该全部函数加上virtual修饰由编译器来帮助取消一些成员函数的虚函数... 阅读全文
摘要:
一、类成员函数调用方式 二、虚成员函数 虚函数的调用,当由一个指向子类的基类指针对象或引用对象时,需要在运行期获取到足够的信息,以表明当前实际执行实体。在类对象模型中,只要有虚函数,则就需要执行期的额外信息(当前指针指向的真实类型以及实际的实体所在位置地址)。这就涉及到vptr和vtable表的构建 阅读全文
摘要:
一、类数据成员绑定 1.一个空类的大小不会为空,一般为一个char,即1个字节大小,其为了区分不同两个空类对象,需要一个地址来表示。 2.一个类的sizeof的大小,由多个方面影响: 1)语言本身的负担(如虚指针) 2)不同编译器对特殊情况的优化处理(如继承于一个空类的类,编译器可能做优化) 3)alignment对齐方式的限制(因为对齐的原因,成员变量的顺序有时也会对sizeof大小影响)。 3 阅读全文
摘要:
一、C++ 默认构造函数 1.关键字explict的引入为解决单个参数的构造函数被隐式当作一个转换运算符的窘迫,此关键字要求在单个参数的构造函数时需显式调用构造函数,而不是当作转换运算;故除非的确需要用到类包装器的转换类时,否则一般情况下单个参数的构造函数建议用explict修饰。 2.编译器会在必要的时候生成默认构造的构造函数,什么情况下是必要的时候,另外生成的默认构造函数是... 阅读全文
摘要:
C++ 对象模型 相对C语言的结构体和函数分离实现的不同,C++的对象模型基于类或继承,实现针对自身的从内存空间和存取时间做了优化或称为折中。 (1). C++对象模型的基本布局,如下图: 1.非静态数据成员在每个类对象中均有一份独立的实体,如:_x; 2.静态数据成员放置在类外,仅有一份共享实体,如:_point_count; 3.静态或非静态的成员函数也被放置在类外... 阅读全文