双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

在类的构造函数中使用memset(this,0,sizeof(*this)), 会产生什么效果?代码如下,不解...

wang603603 wang603603 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


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的值,根据调试来看 也确实如此!)。

...全文
评论 14
收藏 已收藏
分享
返回顶部
wang603603
C++ 语言 65,214 成员 250,514 内容