如果你逻辑地思考构造函数的工作方式以及虚函数在C++中的含义和用法,那么你会意识到在C++中声明虚构造函数是没有意义的。在C++中声明某个东西为虚函数意味着它可以被当前类的子类覆盖,然而构造函数是在对象创建时调用的,在那个时候你不能创建类的子类,你必须创建类,因此永远不需要声明构造函数为虚函数。另一个原因是,构造函数与其类名相同,如果我们将构造函数声明为虚函数,那么它应该在其派生类中重新定义相同的名称,但是你不能有两个类具有相同的名称。所以无法拥有虚构造函数。
"构造函数不能是虚函数" 有一些合理的理由可以证明这个说法。 为了创建一个对象,对象类的构造函数必须与类的类型相同。但是,使用虚拟实现的构造函数是不可能做到的。 在调用构造函数时,虚表 尚未创建,无法解析任何虚函数调用。因此,虚拟构造函数本身将无处查找。 作为结果,不能声明构造函数为虚拟的。