【深度探索C++对象模型】 不管使用memcpy()还是memset(),都只有在“classes不含任何由编译器产生的内部members”时才能运行。如果这个类声明一个或者一个以上的virtual function,或者内含一个virtual base class,那么使用这两个函数将会导致那些“被编译器产生的内部members”的初值所改写。例如下面的声明:
class Shape{
public:Shape() {
memset ( this , 0 , sizeof ( Shape ) ) ; }virtual ~Shape();
}
编译器将为这个constructor扩张为下面:
Shape::Shape()//扩张后的constructor C++伪代码
{
__vptr__Shape = __vptl__Shape;//即便是编译器刚刚设置了__vptr__Shape的值,但是经过memset之后却为0了。memset ( this,0,sizeof(Shape));
};