P88
static data member则放在global data segment中,不会影响class object的大小
但一个template class 的static data member稍有不同
P96
P98
每一个nonstatic data member的偏移量在编译期即可知道.
Point3d origin;
pt->x= 0.0;
origin.x = 0.0等价于&origin+(&Point3d::x-1)
当Point3d是一个derived class,而其继承结果中有一个virtual base class时,而且x是
P164
class B1{};
class B2{};
class D : public B1, public B2{};
B1 *pb1=new D;//使用主虚表
B2 *pb2=new D; //使用次虚表
P169
不要在virtual base class中声明nonstatic data member
176
virtual function其地址在编译期是未知的,所以,对virtual member function取地址,得到的是一个索引值。
205
如果有需要以值方式传递返回一个local class object,那么需要提供一个copy constructor
206
-初始化virtual base class constructors(以base class声明顺序)
-初始化 base class,第二个和后续的base class初始化时,this指针需要调整
-设置vptr指向vtbl
-初始化member initialization list中的data member
-如果一个member没有出现在member initialization list里,但它有一个default contror,那么调用default contror
220
一个class 对于默认的copy assignment operator 在以下情况下不会表现出bitwisecopy:
-当class内带一个member object,而其class有一个copy assignment opt
-当一个class 的base calss有copy assignment opt
-当class声明了任何virtual functions
-当class继承自一个virtual base class
224
230
如果class没有destructor,那么只有在class内带的member object有destructor时,编译器才会合成出一个destructor。
235
-开始执行class 的destructor
-如果class有member class object,而后者有destructor ,那么他们会以声明相反的顺序被调用。
-如果object内带vptr,则被重新设置,指向适当的base class的vtbl
-执行nonvirtual base class的destructor
-执行virtual base class的destructor
268
T c= a+b;不产生临时变量