为什么构造函数不能是虚函数

为什么构造函数不能是虚函数

    从存储空间角度看,使用虚函数时,系统要有一定的空间开销,当一个类带有虚函数时,编译系统会为该类构造一个虚函数表(virtual function table),他是一个指针数组,存放每个虚函数的入口地址。然后还会有一个指向虚函数表的指针vptr,这个vptr指针其实是存储在对象的内存空间的,问题出来了,如果构造函数是虚的,就需要通过vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。

    从使用角度看,如果不用虚函数,那么我们通过指向基类对象的指针,只能访问派生类中的基类成员,不能访问派生类增加的成员。虚函数的作用是通过指向基类的指针或引用能够访问派生类中增加的成员,而构造函数是在创建对象时自动调用的,不可能通过基类的指针或引用去调用。

作者:cumtchw
出处:http://www.cnblogs.com/cumtchw/
我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。

原文地址:https://www.cnblogs.com/cumtchw/p/4726596.html