有关虚函数调用执行的问题,请教!
没有仔细搜过帖子,可能我表述能力不好,百度不到想要的答案,只好在此求救。先在此谢谢了!
问题描述:最近在公司写一个程序,在调试时发现一个问题,调用一个函数时执行逐语句调试时跳到的竟然不是该函数的实现体,而是一个其他文件里的函数!查了一下该函数对应类的虚函数表,发现该函数在虚表里的本来的位置被一个其他函数给占据了(就是调试时跳转的那个函数)!水平实在汗颜,只能在此向各位求助!
由于是公司程序,有做加密,而且代码不小,所以无法拷贝出来贴上给各位查看,实在抱歉!另通过基类指针调用的那个虚函数在子类中是否重写都测过,结果都是一样。看起来好像就是虚表里的函数地址被其他覆盖重写了,但是该函数在虚表中的位置是在中间的,前面后面的都是OK的,为什么唯独这里会被重写呢?
[解决办法]
这种问题,木有代码还真不太好说。帮顶
[解决办法]
虚函数的调用,是根据指针对象来判断,实际还是看指针的指向的对象。
可以使用 tpyeid 查看对象。下面是一个例子:
#include <iostream>#include <typeinfo.h>class Base {public: virtual void vvfunc() {}};class Derived : public Base {};using namespace std;int main() { Derived* pd = new Derived; Base* pb = pd; cout << typeid( pb ).name() << endl; //prints "class Base *" cout << typeid( *pb ).name() << endl; //prints "class Derived" cout << typeid( pd ).name() << endl; //prints "class Derived *" cout << typeid( *pd ).name() << endl; //prints "class Derived" delete pd; getchar(); return 0;}
[解决办法]
用VC6里我也遇到过会跳转错误的时候