多重继承问题的基指针偏移量调整



我知道在这种情况下会进行基准偏移调整

class Mother {
public:
virtual void MotherMethod() {}
int mother_data;
};
class Father {
public:
virtual void FatherMethod() {}
int father_data;
};
class Child : public Mother, public Father {
public:
virtual void ChildMethod() {}
int child_data;
};
Father *f = new Child;

在编译过程中,此代码相当于

Child *tmp = new Child;
Father *f = tmp ? tmp + sizeof(Mother) : 0;

我的问题是如何在编译阶段确定这个偏移量例如,在以下情况下

void fun(Father* f) {
// do something
}

我们不知道指针将接收什么对象,如何确定在编译过程中是否需要或需要调整多少偏移量。

我希望有人能回答我的疑问,非常感谢!

函数的调用方确切地知道所涉及的类型,并进行必要的调整。

也就是说,

Child c;
fun(&c);

行为与完全相同

Child c;
fun(static_cast<Father*>(&c));

但这种转换是隐含的。

最新更新