码迷,mamicode.com
首页 > 其他好文 > 详细

构造函数 memset

时间:2016-09-19 06:48:46      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:构造函数 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

标签:构造函数 memset

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!