虚析构函数和构造函数面试中的几个…

来源:互联网 发布:海岛奇兵攻略软件 编辑:程序博客网 时间:2024/06/03 18:17
1.为什么有时要把析构函数变为虚函数
答:这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。
    当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。
2.为什么构造函数不能是虚函数
答:(1)虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,将无法进行,故构造函数不能是虚函数
3.虚指针和虚函数表分别存储在哪个区域
答:虚指针是属于对象的,在对象的内存空间中,一般是对象的前4个字节
 虚函数表是属于整个类的,其存储位置跟编译器有关,微软编译器的存储位置为常量段,linux下的编译器在只读数据段。
原创粉丝点击