为什么只有默认构造函数只能创建 vptr(Virtual Table Pointer) 和 vtable(Virtual Table)?为什么参数构造函数不能
2 回答
5
首先,C++ 语言标准没有指定 vtables 和 vptrs。
它们是一个实现细节,尽管据我所知,所有现存的 C++ 实现都使用该技术来实现虚函数调度。
通过这样的实现,具有虚拟成员函数的类的所有构造函数都必须建立对象的 vptr。没有它,事情就无法进行。所以 …
”为什么参数构造函数不能
……只是一个不正确的假设。
于 2016-10-05T08:33:32.643 回答
0
假设实现使用 vtables(一个非常常见的实现选择,如“Cheers and hth - Alf”所述),vtables 的创建/填充和调用构造函数是不同的操作。
但是,给定(非抽象)类的所有实例 - 一旦完全构建 - 将具有相同的 vtable 集(从多个基类继承的类可能具有多个 vtable)。根据对象的构造方式(例如,将哪些参数传递给构造函数,调用哪个构造函数等),肯定不会有不同的 vtable。
于 2016-10-05T09:42:03.587 回答