在“Effective C++”(第 3 版,第 118 页)的第 27 项中,Scott Meyers 说:
class Base { ... };
class Derived: public Base { ... };
Derived d;
Base *pb = &d;
这里我们只是创建了一个指向派生类对象的基类指针,但有时,这两个指针并不相同。在这种情况下,将在运行时将偏移量应用于
Derived*
指针以获得正确的Base*
指针值。最后一个例子说明了单个对象(例如,类型为 的对象
Derived
)可能有多个地址(例如,当Base*
指针指向时它的地址和当指针指向时它的地址Derived*
)。
这里有点难以理解。我知道指向基类的指针可以在运行时指向派生类的对象,这称为多态或动态绑定。但是派生类对象在内存中真的有超过 1 个地址吗?
我想我在这里有一些误解。有人可以澄清一下吗?也许这与 C++ 编译器中多态性的实现方式有关?