C++中VPTR和VTABLE的概念

C++中VPTR和VTABLE的概念,c++,default-constructor,vtable,vptr,C++,Default Constructor,Vtable,Vptr,为什么只有默认构造函数才能创建vptrVirtual表指针和vtableVirtual表?为什么参数构造函数不能满足,VTABLE和VPTRS不是由C++语言标准指定的。 它们是实现细节,尽管我知道所有现存的C++实现都使用该技术来实现虚拟函数调度。 在这种实现中,具有虚拟成员函数的类的所有构造函数都必须建立对象的vptr。没有它,一切都无法运转。所以 “为什么参数构造函数不能 …只是一个不正确的假设。假设实现使用vtables一个非常常见的实现选择,正如Cheers和hth-Alf所指出的,v

为什么只有默认构造函数才能创建vptrVirtual表指针和vtableVirtual表?为什么参数构造函数不能满足

,VTABLE和VPTRS不是由C++语言标准指定的。

它们是实现细节,尽管我知道所有现存的C++实现都使用该技术来实现虚拟函数调度。 在这种实现中,具有虚拟成员函数的类的所有构造函数都必须建立对象的vptr。没有它,一切都无法运转。所以

“为什么参数构造函数不能


…只是一个不正确的假设。

假设实现使用vtables一个非常常见的实现选择,正如Cheers和hth-Alf所指出的,vtables的创建/填充和调用构造函数是不同的操作


但是,一个给定的非抽象类的所有实例在完全构造后都将具有相同的vtable集。从多个基继承的类可能具有多个vtable。根据对象的构造方式,当然不会有不同的vtable,例如,将哪些参数传递给构造函数,调用哪个构造函数,等等。

为什么只有默认构造函数才能创建vptrVirtual Table指针和vtableVirtual Table?你从哪里得到这个主意的?这没有任何意义。构造函数不做任何虚拟的东西。在类型中使用虚函数会使类型具有多态性,但这是编译时的事情,与构造函数的工作无关。此外,没有构造函数创建任何vtable。