C++:将派生类指针分配给基类指针

问题描述

对 C++ 不是很熟悉,所以对于这个潜在的菜鸟问题深表歉意(尽管我找不到这个问题的答案,尽管有半相似的问题)。

在我正在处理的代码库中(抱歉,无法共享确切的代码),有一个 Base 类和一个派生类。我有一个指向派生类 results 的指针。

在某些时候,我设置了

d

非常奇怪的是,指针最终会得到不同的值! Base* b = d; 最终得到的地址正好比 b 大 8。

我无法用直接的 Base/Derived 类重现这一点,所以我确信在我正在使用的特定类中做了一些事情。

谁能解释一下这怎么可能? C++ 中的什么可能允许这样的事情?

提前致谢!

解决方法

超级奇怪的是,指针最终具有不同的值!

这其实很正常。 b 是指向基础子对象的指针。不能保证基础子对象存储在封闭派生对象的开头。事实上,如果类具有虚函数,则通常不是,因为语言实现通常将虚指针存储在那里(虚指针是 C++ 程序员几乎不需要真正了解的实现细节)。

还要考虑多重继承。如果有多个非空基,那么肯定不能都存储在同一个地址。

,

我不确定您的问题,但基本上,指针用于指向/存储分配给指针变量的变量的地址。要检查指针值,请使用 *b、b、&b 来检查值、存储在指针中的地址,而确切的 8 位可能是派生类的地址