C++类的构造函数不能为虚函数的原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++类的构造函数不能为虚函数的原因相关的知识,希望对你有一定的参考价值。

C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化;

我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的;

那么问题来了,如果构造函数为虚函数,此时的内存是一片空白,不存在该虚函数表vtable,那么无法找到该构造函数;

所以说,构造函数不能为虚函数。


对于析构函数而言,可以为虚函数,因为此时虚函数表早已建立;并且,常常析构函数都是虚函数。原因就是,通过基类指针在销毁对象的时候,可以正确的识别要销毁对象的类型,从而防止析构不完全的出现。


以上是关于C++类的构造函数不能为虚函数的原因的主要内容,如果未能解决你的问题,请参考以下文章

C++ 构造函数不能是虚函数,基类析构函数应该为虚函数

继承虚函数注意点

为什么构造函数不能声明为虚函数,析构函数可以

构造函数不能为虚函数

牛客网刷题知识汇总2

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