雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

相同类的对象是否共享虚函数表,不同类呢

Posted on 2013-12-02 18:07  huhuuu  阅读(1160)  评论(0编辑  收藏  举报

实践出真理!

#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;
}
View Code

a,a2的虚函数表地址一样,说明想同类的对象共享虚函数表(这个比较好理解,因为,同一个类,调用的函数都是一样的,虚函数表占用要内存空间,一样类的函数表就没必要另外在占用内存了,共享了就行)

而a3是不同地址,所以不同类的对象不共享虚函数表