首页 > 代码库 > 构造函数 memset
构造函数 memset
构造函数中使用memset会剖坏虚表指针
1.通过对象调用时,编译器直接生成调用的地址;
2.通过指针或者引用调用时,在运行期通过虚表指针查询调用的地址;
#include <iostream> using namespace std; class A { public: A() { memset(this,0,sizeof(*this)); } virtual void fun() { cout << "fun" << endl; } }; class B:public A { public: B() { memset(this, 0, sizeof(*this)); } virtual void fun() { cout << "B::fun()" << endl; } }; int main() { //1.通过对象调用时,编译器直接生成调用的地址; //2.通过指针或者引用调用时,在运行期通过虚表指针查询调用的地址; A a; a.fun(); B b; b.fun(); A& aa = a; aa.fun(); A* pa = &a; pa->fun(); system("pause"); }
反汇编:
《完》
本文出自 “零蛋蛋” 博客,谢绝转载!
构造函数 memset
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。