实践出真理!
#include<stdio.h> #include<iostream> class A{ public:A(); virtual~A(); virtual void fun1(){ printf("A:fun1"); } virtual void fun2(){ printf("A:fun2"); } }; A::A(){} A::~A(){ printf("Delete class A\n"); } class B : public A { public:B(); ~B(); void fun1(){ printf("A:fun1"); } void fun2(){ printf("A:fun2"); } }; B::B(){ } B::~B(){ printf("Delete class B\n"); } int main(){ A *a=new B; A *a2=new B; A *a3=new A; delete a; //delete c; //delete d; return 0; }
a,a2的虚函数表地址一样,说明想同类的对象共享虚函数表(这个比较好理解,因为,同一个类,调用的函数都是一样的,虚函数表占用要内存空间,一样类的函数表就没必要另外在占用内存了,共享了就行)
而a3是不同地址,所以不同类的对象不共享虚函数表