首页 > 其他 > 详细

构造函数 memset

时间:2016-09-19 06:47:58      阅读:205      评论:0      收藏:0      [点我收藏+]

构造函数中使用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

原文:http://lingdandan.blog.51cto.com/10697032/1853826

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!