微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决C++:将派生类指针分配给基类指针

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

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

在某些时候,我设置了

d

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

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

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

提前致谢!

解决方法

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

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

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

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。