我真的通过虚函数表,调用了我想要的函数吗?这下懵了。
本帖最后由 ngbbxt 于 2013-01-24 11:37:33 编辑 经过下面代码,为什么输出来的两个this,不相等,懵了。
class Base {
public:
Base()
{
cout<<"Base()::this "<<this<<endl;
}
virtual void f()
{
cout<< "Base::f() this "<<this<<endl;
}
};
Base b;
typedef void(*Fun)(void);
Fun pFun = (Fun)*((int*)*(int*)(&b));//这里是通过访问虚表,来获取目的函数。
pFun();
Base b;
typedef void(*Fun)(void);
Fun pFun = (Fun)*((int*)*(int*)(&b));//这里是通过访问虚表,来获取目的函数。
__asm
{
lea ECX,[b]
}
pFun();
Base b;
typedef void(__fastcall *Fun)(Base* b);
Fun pFun = (Fun)*((int*)*(int*)(&b));//这里是通过访问虚表,来获取目的函数。
pFun(&b);