Recently,I've been reading "inside the c++ object model". It says that the vptr initializes after calling the base class's constructor. So I ran a test:
class A {
public:
A(int i) {
std::cout << i << std::endl;
}
virtual int vfunc() {
return 1;
}
};
class B : public A {
public:
B() : A(vfunc()) {
}
virtual int vfunc() {
return 2;
}
};
int main() {
B b;
}
Here is the result:
2
My question is, does class B set its vptr first before calling the base class A's constructor?