虚函数对应一个vtable,vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。
自己做了一个测试:编译运行都无法通过
#include <iostream>
using namespace std;
class test
{
public:
test()
{
cout<<"con"<<endl;
}
virtual ~test()
{
cout<<"dec"<<endl;
}
};
int main()
{
test T;
}
本文探讨了虚函数和构造函数的关系,解释了为什么构造函数不能是虚函数,并通过一个简单的C++示例进行了验证。
2万+

被折叠的 条评论
为什么被折叠?



