在 C++ 中,为什么虚函数表指针(vptr)是在构造函数的初始化列表中初始化而不是在构造函数体内?请说明其初始化时机与原因。
考察说明
考察 C++ 对象构造的底层细节与 vptr 的初始化顺序
回答思路
- 能说明 vptr 在对象内存布局中的位置
- 能解释 vptr 在进入构造函数体之前,通过初始化列表初始化(实际上是编译器在基类构造之后、成员构造之前插入的步骤)
- 能说明为什么要在构造函数体前设置 vptr,以便构造函数体内的虚函数调用(但注意不动态绑定)
- 能阐述标准规定与实现细节的关系
考察 C++ 对象构造的底层细节与 vptr 的初始化顺序