【发布时间】:2021-09-09 07:14:56
【问题描述】:
对 C++ 不是很熟悉,因此对于这个可能令人讨厌的问题深表歉意(尽管有一些类似的问题,但我找不到答案)。
在我正在处理的代码库中(抱歉,无法共享确切的代码),有一个 Base 类和一个 Derived 类。我有一个指向派生类的指针,d。
在某个时候,我设置了
Base* b = d;
超级奇怪的是指针最终会得到不同的值! b 最终得到的地址正好比 d 大 8。
我无法使用直接的 Base/Derived 类来重现这一点,所以我确信在我正在使用的特定类中正在做一些事情。
谁能解释一下这怎么可能? C++ 中的什么可能允许这样的事情?
提前致谢!
【问题讨论】:
-
我不认为 C++ 与地址有任何关系
-
对不起,你必须想出更多。到目前为止,您提到的任何事情都不会导致它,如果您已经创建了一个不会重现它的最小示例,那么您的程序中显然还有其他东西会产生影响。将指针分配给指针永远会在传输中改变指针的值。
-
嗨 Silvio,这确实是我一直在寻找的答案。作为一个新手 C++ 程序员,我只是想确认这不应该发生,我猜。随意添加您的评论作为答案。
-
提示:将你的类定义复制到一个单独的项目中,并虚设你需要的东西来编译你的一行。然后开始删除班级成员。您应该能够将定义缩短到几行,足够短以更改名称并显示为minimal reproducible example,而无需共享商业机密。 (我的猜测是涉及到虚继承,只是为了和人们猜测虚函数表不同。)