Heim > Fragen und Antworten > Hauptteil
#include <iostream>
using namespace std;
class Base
{
public:
Base(){};
virtual void Base1(){cout << "Base::Base1" << endl;}
virtual void Base2(){cout << "Base::Base2" << endl;}
virtual ~Base(){};
};
int main()
{
Base* f = new Base;
intptr_t* vptr_adress = (intptr_t*)f;
intptr_t* vptr_func1_adress = (intptr_t*)*vptr_adress;
typedef void(*FUNC)(void);
FUNC f1 = (FUNC)*vptr_func1_adress;
FUNC f2 = (FUNC)*(vptr_func1_adress+1);
f1();
f2();
delete f;
f1();
f2();
system("pause");
return 0;
}
结果如下
问题如题:为什么在delete后仍然可以访问虚成员函数
迷茫2017-04-17 13:31:22
了解一下对象的Memory Model你就应该知道对象虚表里存的函数指针指向的函数并不存在于对象的内存空间里。譬如你可以把一个0转成一个Base*,然后用这个Base*去访问Base1,Base2都不会出问题。当然如果你成员函数里用到了this就崩了。