当前位置: 代码迷 >> 综合 >> memcpy()、memset()注意事项
  详细解决方案

memcpy()、memset()注意事项

热度:132   发布时间:2023-10-13 08:56:44.0

【深度探索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));
};
  相关解决方案