1.c++继承体系中内存布局的padding是保留的,这是为了防止父类和子类互相赋值时出现语义错误。
2.同样由于内部实现的差别,如padding或vptr的存在,慎用memset等内存直接操作方式,c++标准没有规定内存的布局细节。
3.指向对象成员的指针类型,其值是偏移值,这就产生一个问题,指向第一个成员的偏移值为0,空指针值也为0,必须对这种情况加以区分,实现策略是将指向成员的指针值(偏移)被加1,用以和空指针区分开来,因此使用指向成员的指针值应减1以得到真实的偏移。
X::*p=0 ;
X::*p=&X::first ;