在类的构造函数中使用memset(this,0,sizeof(*this)), 会产生什么效果?代码如下,不解...
class ClassA
{
public:
ClassA()
{
cout<<"A: "<<this<<endl;
Clear();
}
void Clear()
{
memset(this,0,sizeof(*this));
}
~ClassA()
{
}
virtual void func()
{
cout<<"func.A "<<endl;
}
};
class ClassB:public ClassA
{
public:
ClassB()
{
cout<<"B: "<<this<<endl;
}
void func()
{
cout<<"func.B "<<endl;
}
};
int main()
{
ClassA a;
ClassB b;
ClassA *pa = &a;
ClassA *pab = &b;
ClassB* pb = &b;
a.func(); //1 func.A
b.func(); //2 func.B
pa->func(); //3 异常
pab->func(); //4 func.B
pb->func(); //5 func.B
return 1;
}
按照正常的理解, 第一个也应该出现异常,此时vptr的值为0x000000! 怎么会出现这样的结果, 请指教!
(我认为: 在CLassB类的对象b中,虚表指针其实 已经不属于 基类部分了, 所以在构造函数中去 调用memset(..) 并不影响 vptr的值,根据调试来看 也确实如此!)。
...全文
相关推荐
C语言memset函数使用方法详解
主要介绍了C语言memset函数使用方法详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下
C++中memset函数用法详解
主要介绍了C++中memset函数用法,结合实例形式详细分析了memset函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
memset用法 很详细
memset用法。。。。。。。。。。。。。。
memset的初浅体会
在学习memset函数的时候,查了一些资料,转一个对memset()的用法的一些初浅的体会。
memset函数的使用分析
本篇文章是对memset函数的使用进行了详细的分析介绍,需要的朋友参考下



