- 一个 pure virtual destructor 纯虚析构函数 需要被定义,因为编译器会在derived类中静态调用他。所以一般不要把虚析构函数声明为纯虚。
- 不要把不会呗重写的函数声明为虚函数,因为效率上没有静态函数高,并且不能被inline所优化。
- 虚函数在设计为const的时候,需要谨慎,因为你不知道derived class 会不会修改成员变量,所以建议是最好不要声明为const。
无继承情况下的构造
- Plain Old Data (POD) POD 指的是这样一些数据类型:基本数据类型、指针、 union 、数组、构造函数是 trivial 的 struct 或者 class 。POD 用来表明 C++ 中与 C 相兼容的数据类型。自动生成的几个函数都是 trival 的,一些情况下,编译器则不会调用(可能因为调用了也没什么意义,拷贝也是逐位拷贝)。而如果你定义了默认构造函数,则会调用。
- 在有虚函数的情况下,每个object 中会有虚指针,所以构造函数中会被编译器添加虚指针的部分。
vptr相关
- 在一个构造函数中调用的 virtual function,都是这个类的,而不会有多态。比如一个derived类在构造中,会调用 base 类的构造函数,但是其中的虚函数没有多态性。所以一般不在构造函数中调用虚函数。因为在 base 的调用中,derived的部分还没有被初始化,vptr还只是base设置的vptr,所以没法调用派生类的虚函数。
后面的内容暂时搁置一下吧~